C# Style.Triggers与ControlTemplate.Triggers
我应该在什么时候选择C# Style.Triggers与ControlTemplate.Triggers,c#,wpf,xaml,styles,controltemplate,C#,Wpf,Xaml,Styles,Controltemplate,我应该在什么时候选择Style.Triggers,什么时候选择ControlTemplate.Triggers?使用一个比另一个有什么好处吗 假设我有这些风格可以达到相同的效果: <Style TargetType="{x:Type Button}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Ty
Style.Triggers
,什么时候选择ControlTemplate.Triggers
?使用一个比另一个有什么好处吗
假设我有这些风格可以达到相同的效果:
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<ControlTemplate.Triggers>
...
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="{x:Type Button}">
<Setter Property="Template">
...
</Setter>
<Style.Triggers>
...
</Style.Triggers>
</Style>
...
...
...
通过windows 8中的按钮进行更新确实使用了ControlTemplate。IsMouseOver的触发器,因此在某些情况下可能需要完全覆盖ControlTemplate
,以获得所需的功能。因此,在这种情况下,您需要使用ControlTemplate触发器而不是样式触发器
您可能并不总是需要覆盖默认的ControlTemplate
。假设你有一个控件,当IsMouseOver
为true时,你希望所有MyTextControl都有一个蓝色的前景
,并将其他所有内容保留为默认值。您可以使用以下内容:
如果您想使用ControlTemplate.Triggers
,则需要复制默认的MyTextControl
模板
,否则您将无法看到
除此之外,我认为唯一的区别是
Style.Triggers
的优先级低于ControlTemplate.Triggers
()。但只有在使用这两种触发器类型时,这才有意义 对我来说,这不会覆盖默认模板style@CoolBlue对,这里的代码将保留默认模板不变。如果您使用问题中的代码,您将覆盖默认值。是的,我的观点是,由于优先级以及自Windows 8以来的更改,上述代码不再有效,这是因为样式未覆盖模板。现在最好的选择是在控件中单击鼠标右键,然后按照选项编辑默认样式的副本。VS2013提供了这个开箱即用的功能。@CoolBlue哦,我现在明白了。这在Windows 8中根本不起作用,还是只是应用商店?我只能找到类似或的信息。很遗憾,我没有一台机器来测试这个。我在windows 10桌面上,无法工作。看见