WPF中的平面按钮 – 触发不触发

我想让我的按钮更平坦,所以我创造了两种风格; 第一个用于ToggleButton ,它派生自ToolBar.ToggleButtonStyleKey ,第二个用于派生自ToolBar.ButtonStyleKey Button

它工作得很好 – 按钮现在是工具栏般的平面。 我想要的第二件事是当用户将光标hover在控件上时使Background属性透明。 所以为了实现这个目的,我定义了一个简单的触发器,它将Background设置为TransparentIsMouseOver事件。 它适用于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触发器保留在原位,您可能希望将其删除,或添加其他触发器。

  

我看到FlatToggleButtonFlatButton样式已经将Background视为透明

  

当触发器在IsMouseOver触发并再次将Background设置为Transparent时,您将看不到任何差异

所以你需要做的是这些选项之一:

  • 更改两种样式 ,使背景不是透明
  • 更改触发器 ,使其将背景设置为透明以外的其他内容