WPF中的平面按钮 – 触发不触发
我想让我的按钮更平坦,所以我创造了两种风格; 第一个用于ToggleButton
,它派生自ToolBar.ToggleButtonStyleKey
,第二个用于派生自ToolBar.ButtonStyleKey
Button
。
它工作得很好 – 按钮现在是工具栏般的平面。 我想要的第二件事是当用户将光标hover在控件上时使Background
属性透明。 所以为了实现这个目的,我定义了一个简单的触发器,它将Background
设置为Transparent
的IsMouseOver
事件。 它适用于ToggleButton
,然而,同样的触发器对Button
不起作用(背景根本没有受到影响)。
有谁知道为什么这个触发器适用于ToggleButton
并且不适用于Button
? 我确实期望相同的行为,因为两种风格都来自同一个家庭。
以下是完整的代码。
I am Toggle Button
我看一下使用Snoop(一个非常方便的程序来检查WPF),它看起来像你用作基础的模板, ToolBar.ButtonStyleKey
,有一个触发器,可以选择一个实体Brush
作为Border
元素的背景Button
(在这种情况下IsMouseOver
为true时)。
您的本地样式触发器成功将Button
元素的背景设置为透明(或者更确切地说,保持透明),但Border
背景不受影响,因此您仍将看到突出显示行为。
边框背景:
按钮背景:
我认为你必须定义一个ControlTemplate
来获取你想要的按钮,我从Kaxaml中包含的一个ToolBar
示例中获取了这个(一个不错的XAML编辑器)。 这是Toolbar
底部按钮样式的合理传真,删除了一些位,它可能会按您的需要运行,或者您可能需要根据您所需的行为进行调整。
我已将IsPressed
触发器保留在原位,您可能希望将其删除,或添加其他触发器。
我看到FlatToggleButton和FlatButton样式已经将Background视为透明
当触发器在IsMouseOver上触发并再次将Background设置为Transparent时,您将看不到任何差异
所以你需要做的是这些选项之一:
- 更改两种样式 ,使背景不是透明
- 更改触发器 ,使其将背景设置为透明以外的其他内容