WPF发光按钮

7
在我们的应用中点击 WPF 按钮后,它们会闪烁蓝色、恢复原色、再次蓝色等等。这似乎是 Windows Vista/7 上的默认行为,在 XP 上不会出现。有什么建议吗?
2个回答

9
你需要覆盖默认的按钮模板--http://mark-dot-net.blogspot.com/2007/07/creating-custom-wpf-button-template-in.html 这篇文章可以帮助你入门。

具体来说,看第三部分:

<ControlTemplate.Triggers>
    <Trigger Property="IsMouseOver" Value="True">
        <Setter TargetName="border" Property="BorderBrush" Value="#FF4788c8" />
        <Setter Property="Foreground" Value="#FF4788c8" />
    </Trigger>
    <Trigger Property="IsPressed" Value="True">                   
       <Setter Property="Background" >
           <Setter.Value>
               <LinearGradientBrush StartPoint="0,0" EndPoint="0,1" >
                   <GradientStop Color="#FFFFD190" Offset="0.35"/>
                   <GradientStop Color="Orange" Offset="0.95"/>
                   <GradientStop Color="#FFFFD190" Offset="1"/>
               </LinearGradientBrush>
            </Setter.Value>
        </Setter>
        <Setter TargetName="content" Property="RenderTransform" >
            <Setter.Value>
                <TranslateTransform Y="1.0" />
            </Setter.Value>
        </Setter>
    </Trigger>
    <Trigger Property="IsDefaulted" Value="True">
       <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />
    </Trigger>
    <Trigger Property="IsFocused" Value="True">
       <Setter TargetName="border" Property="BorderBrush" Value="#FF282828" />
    </Trigger>
    <Trigger Property="IsEnabled" Value="False">
       <Setter TargetName="border" Property="Opacity" Value="0.7" />
       <Setter Property="Foreground" Value="Gray" />
   </Trigger>
</ControlTemplate.Triggers>

你的触发器最好放在一个样式中,这比使用控件模板要容易得多。 - markmnl
1
@markmnl 如果有更好的方法,请随意发布另一个答案!目前还没有被接受的答案。 Style选项很可能是最佳选择。即使OP已经解决并完成了他的代码,它也会帮助其他人找到这篇文章。 - Nate

2
您需要重写ControlTemplate。否则,它将使用触发器来在鼠标悬停等事件上设置颜色。如果您只是设置Background,则仅在没有Trigger发生时设置默认背景。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接