Кнопка Изменить цвет фона при нажатии / нажатии - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть то, что я думаю, было бы легко решить, но для жизни я не могу получить именно то, что я хочу, используя WPF (исходя из фона WinForms).

Все, что я пытаюсь сделать, - это создать кнопку, цвет фона которой меняется, пока кнопка нажата / нажата. Как только кнопка отпущена, она возвращается в нормальное состояние. Исходя из этого, я также пытаюсь, чтобы на Mouse Hover ничего не происходило.

Мне удалось создать шаблон для удаления эффектов наведения мыши, но, похоже, можно понять, как изменить цвет фона, нажимая / нажимая, а затем сбрасывая.

Я работал над этим шаблоном из другого поста «Переполнение стека», который дает мне хороший переход при нажатии кнопки.

Я счастлив потерять эффект, но использовал это как основу для попытки понять, как собрать все воедино.

 <Style x:Key="InformButton" TargetType="{x:Type Button}">
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="Margin" Value="2"/>
        <Setter Property="FontFamily" Value="Tahoma"/>
        <Setter Property="FontSize" Value="10px"/>
        <Setter Property="FontWeight" Value="Normal"/>
        <Setter Property="FocusVisualStyle" Value="{StaticResource MyFocusVisual}" />
        <Setter Property="Background" >
            <Setter.Value>
                <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
                    <GradientStop Color="#FFFFD190" Offset="0.2"/>
                    <GradientStop Color="Orange" Offset="0.85"/>
                    <GradientStop Color="#FFFFD190" Offset="1"/>
                </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border x:Name="border" 
                    BorderThickness="1"
                    Padding="4,2" 
                    BorderBrush="DarkGray" 
                    CornerRadius="3" 
                    Background="{TemplateBinding Background}">
                        <Grid>
                            <ContentPresenter HorizontalAlignment="Center" 
                                   VerticalAlignment="Center" x:Name="contentShadow"
                        Style="{StaticResource ShadowStyle}" >
                                <ContentPresenter.RenderTransform>
                                    <TranslateTransform X="1.0" Y="1.0" />
                                </ContentPresenter.RenderTransform>
                            </ContentPresenter>
                            <ContentPresenter HorizontalAlignment="Center" 
                                VerticalAlignment="Center" x:Name="content" />
                        </Grid>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="False">
                            <Setter TargetName="border" Property="BorderBrush" Value="DarkGray" />
                            <Setter Property="Foreground" Value="Black" />
                        </Trigger>
                        <Trigger Property="IsPressed" Value="True">
                           <Setter TargetName="content" Property="RenderTransform" >
                                <Setter.Value>
                                    <TranslateTransform Y="2.0" />
                                </Setter.Value>
                            </Setter>
                            <Setter Property="Foreground" Value="#007DB8" />
                        </Trigger>
                        <Trigger Property="IsDefaulted" Value="True">
                            <Setter TargetName="border" Property="BorderBrush" Value="DarkGray" />
                        </Trigger>
                        <Trigger Property="IsFocused" Value="True">
                            <Setter TargetName="border" Property="BorderBrush" Value="DarkGray" />
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="border" Property="Opacity" Value="0.7" />
                            <Setter Property="Foreground" Value="Gray" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

1 Ответ

0 голосов
/ 12 ноября 2018

Ответ на самом деле довольно прост - у вас уже есть триггер «нажата» - вам просто нужно добавить установщик фона, например:

<Setter Property="Background" Value="Red"/>

Чтобы было проще понять, мы можем увидеть упрощенную версию вашего шаблона:

<Style x:Key="InformButton" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="LightBlue">
    </Setter>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border x:Name="border" BorderThickness="1" Padding="4,2"
                        BorderBrush="DarkGray"  CornerRadius="3" 
                        Background="{TemplateBinding Background}">
                    <Grid>
                        <ContentPresenter HorizontalAlignment="Center" 
                             VerticalAlignment="Center" x:Name="content" />
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsPressed" Value="True">
                        <Setter Property="Background" Value="Red"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Здесь вы можете видеть, что все, что у нас есть, - это базовый фон (светло-голубой), предъявитель контента для контента и триггер, который при нажатии кнопки изменит цвет на красный.

Лично я думаю, что этот минимальный шаблон также выглядит лучше, поскольку он будет соответствовать глобальным настройкам шрифта и стилю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...