Установить цвет свойства BorderBrush для границы при щелчке левой кнопкой мыши в WPF

Прежде всего, извините, я очень новичок в WPF ...

У меня есть кнопка с рамкой вокруг нее. Теперь цвет нижней границы меняется на оранжевый при наведении указателя мыши на кнопку, но теперь мне нужно безуспешно изменить цвет нижней границы на зеленый при щелчке мышью (левой кнопкой мыши).

Ниже код:

<Button  Height="64" Width="64" Margin="10" Click="BtnDelete" Content="Delete">
    <Button.Template>
        <ControlTemplate>
            <Border x:Name="BtnDeleteBorder" BorderBrush="Transparent" BorderThickness="0 0 0 3">
                <StackPanel>
                    <Image Height="36" Width="36" Stretch="UniformToFill" Source="Resources/Trash.png"/>
                    <Label  HorizontalAlignment="Center">Delete</Label>
                </StackPanel>
            </Border>

            <ControlTemplate.Resources>

                <Storyboard x:Key="toggleBorderColor">
                    <ColorAnimationUsingKeyFrames  Storyboard.TargetName="BtnDeleteBorder" Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)">
                        <SplineColorKeyFrame  Value="Green"/>
                    </ColorAnimationUsingKeyFrames>                                        
                </Storyboard>

          </ControlTemplate.Resources>

          <ControlTemplate.Triggers>

                <Trigger Property="IsMouseOver" Value="True">
                    <Setter TargetName="BtnDeleteBorder" Property="BorderBrush" Value="Orange" />
                </Trigger>

                <EventTrigger RoutedEvent="MouseLeftButtonDown">
                    <BeginStoryboard Storyboard="{StaticResource toggleBorderColor}"/>                                        
                </EventTrigger>

            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Button.Template>
</Button>

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


person Ralph    schedule 24.06.2017    source источник


Ответы (1)


Переместить триггеры на Style

<Style x:Key="UnderlinedButton"
       TargetType="{x:Type Button}">
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="BorderThickness" Value="0 0 0 3"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="BorderBrush" Value="Orange" />
        </Trigger>
        <Trigger Property="IsPressed" Value="True">
            <Setter Property="BorderBrush" Value="Green" />
        </Trigger>
    </Style.Triggers>
</Style>

и примените этот стиль к своей кнопке

<Button Height="64"
        Width="64"
        Margin="10"
        Click="BtnDelete"
        Content="Delete"
        Style="{StaticResource UnderlinedButton}">
    <Button.Template>
        <ControlTemplate TargetType="{x:Type Button}">
            <Border BorderBrush="{TemplateBinding BorderBrush}"
                    BorderThickness="{TemplateBinding BorderThickness}">
                <StackPanel>
                    <Image Height="36"
                           Width="36"
                           Stretch="UniformToFill"
                           Source="Resources/Trash.png"/>
                    <Label HorizontalAlignment="Center"
                           Content="{TemplateBinding Content}"/>
                </StackPanel>
            </Border>
        </ControlTemplate>
    </Button.Template>
</Button>

Используйте TemplateBinding для BorderBrush, BorderThickness и Content.

person Maxim    schedule 25.06.2017