鼠标悬停时按钮的背景闪烁或消失

时间:2020-01-03 12:21:59

标签: c# wpf xaml wpf-controls

我在“鼠标悬停”效果上为App.xaml文件内“资源字典”中的按钮添加了自定义样式。在我的计算机上,它运行良好,但是在某些PC上,鼠标悬停时按钮的背景闪烁或消失。

enter image description here

App.xaml代码

      <ResourceDictionary>
            <Style x:Key="btn-danger" TargetType="{x:Type Button}">

                <Setter Property="Background" Value="#d84315" />
                <Setter Property="Foreground" Value="White" />

                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border Background="{TemplateBinding Background}" Cursor="Hand">
                                <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                            </Border>

                        </ControlTemplate>
                    </Setter.Value>
                </Setter>

                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="#d9534f" />
                        <Setter Property="FontWeight" Value="Bold" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ResourceDictionary>

如何使用

<Button Style="{StaticResource btn-danger}" Margin="5" Click="Ok_Button_Click" Height="29" Width="100" Content="{Binding Path=Ok, Source={StaticResource Resources}}"/>

1 个答案:

答案 0 :(得分:0)

有必要将触发器放置在template属性下,以适当更改边框背景。尝试如下更改样式定义:

<ResourceDictionary>
  <Style x:Key="btn-danger" TargetType="{x:Type Button}">
    <Setter Property="Background" Value="Gray" />                
    <Setter Property="Foreground" Value="White" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Button}">
                <Border Background="{TemplateBinding Background}" Cursor="Hand">
                    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="Background" Value="#d9534f" />                                    
                        <Setter Property="FontWeight" Value="Bold" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
  </Style>
</ResourceDictionary>