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

时间:2013-09-04 20:35:02

标签: c# wpf button styles flat

我想让我的按钮更平坦,所以我创造了两种风格; ToggleButton的第一个来自ToolBar.ToggleButtonStyleKey,第二个来自Button的{​​{1}}。

效果很好 - 按钮现在像工具栏一样扁平。我想要的第二件事是当用户将光标悬停在控件上时,ToolBar.ButtonStyleKey属性是透明的。因此,为了实现这一点,我定义了一个简单的触发器,将Background设置为Background Transparent事件。它适用于IsMouseOver,但同样的触发器不适用于ToggleButton(背景根本没有受到影响)。

有谁知道为什么此触发器适用于Button,并且不适用于ToggleButton?我确实期望同样的行为,因为这两种风格来自同一个家庭。

以下是完整的代码。

Button

2 个答案:

答案 0 :(得分:1)

我看了一下使用Snoop(一个非常方便的程序来检查WPF),看起来你用作基础的模板ToolBar.ButtonStyleKey有一个选择一个实体{{1}的触发器} BrushBorder元素的背景(在Button为真的情况下)。

您的本地样式触发器已成功将IsMouseOver元素的背景设置为透明(或者更确切地说,保持透明),但Button背景不受影响,因此您仍会看到突出显示行为。

边框背景: Border Background

按钮背景: Button Background

我认为你必须定义一个Border来获取你想要的按钮,我从Kaxaml中包含的ControlTemplate个样本中获取了这个(一个不错的XAML编辑器) 。它是ToolBar基本按钮样式的合理传真,删除了一些位,它可能会按照您的需要运行,或者您可能需要根据您所需的行为进行调整。

我已将Toolbar触发器留在原位,您可能希望将其删除,或添加其他触发器。

IsPressed

答案 1 :(得分:0)

我看到 FlatToggleButton FlatButton 样式已经背景透明

<Setter Property="Background" Value="Transparent"/>

当触发器在 IsMouseOver 上触发并再次将背景设置为透明时,您将看不到任何差异

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

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