Style.Triggers与ControlTemplate.Triggers

我应该何时选择Style.Triggers ,何时应该选择ControlTemplate.Triggers ? 使用一个在另一个上有什么好处吗?

假设我有这些样式可以达到相同的效果:

      ...        ...   ...   

从Background 更新 不会更改按钮C#WPF Windows 8中的Button确实对IsMouseOver使用ControlTemplate.Trigger,因此在某些情况下可能需要完全覆盖ControlTemplate才能获得所需的function。 因此,您需要在Style触发器上使用ControlTemplate触发器。

您可能并不总是需要覆盖默认的ControlTemplate 。 假设您有一个控件,并且您希望所有MyTextControl在IsMouseOver为true时具有蓝色ForegroundIsMouseOver其他所有内容保留为默认值。 你可以使用这样的东西:

  

如果你想使用ControlTemplate.Triggers你需要复制默认的MyTextControl Template ,否则你最终会没有视觉效果。

除此之外,我认为唯一的区别是Style.Triggers的优先级低于ControlTemplate.Triggers ( Precedence documentation )。 但是,只有使用两种触发类型才有意义。