DeM*_*ama 18 c# wpf xaml styles controltemplate
我什么时候应该选择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>
Run Code Online (Sandbox Code Playgroud)
小智 15
从Background 更新不会更改按钮C#WPF Windows 8中的Button确实对IsMouseOver使用ControlTemplate.Trigger,因此有些情况ControlTemplate可能需要完全覆盖才能获得所需的功能.因此,您需要在Style触发器上使用ControlTemplate触发器.
您可能并不总是需要覆盖默认值ControlTemplate.假设您有一个控件,并且您希望所有MyTextControl Foreground在IsMouseOver为true 时为蓝色,并将其他所有内容保留为默认值.你可以使用这样的东西:
<Style TargetType="{x:Type MyTextControl}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Foreground" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)
如果你想使用ControlTemplate.Triggers你需要复制默认值MyTextControl Template,否则你最终会没有视觉效果.
除此之外,我认为唯一的区别是Style.Triggers优先级低于ControlTemplate.Triggers(Precedence documentation).但是,只有使用两种触发类型才有意义.
| 归档时间: |
|
| 查看次数: |
9649 次 |
| 最近记录: |