如果给定x:Key,样式会产生不同的呈现结果
本文关键字:结果 Key 样式 如果 | 更新日期: 2023-09-27 18:10:45
如果给定x:Key
,样式会产生不同的呈现结果
对于ToggleButtons
,我有以下样式和ControlTemplate
,它们按我想要的方式工作。
<Style TargetType="RadioButton" BasedOn="{StaticResource {x:Type ToggleButton}}"/>
<ControlTemplate TargetType="RadioButton" x:Key="RadioTemplate">
<RadioButton IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsChecked, Mode=TwoWay}">
<RadioButton.Content>
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
<ContentControl Content="{TemplateBinding Content}"/>
</Viewbox>
</RadioButton.Content>
</RadioButton>
</ControlTemplate>
然而,当我给Style
一个x:Key
, ControlTemplate
中的RadioButton
继承了如下所示的样式时,渲染结果与上面代码给出的结果不同。
<Style TargetType="RadioButton" BasedOn="{StaticResource {x:Type ToggleButton}}" x:Key="RadioStyle"/>
<ControlTemplate TargetType="RadioButton" x:Key="RadioTemplate">
<RadioButton Style="{StaticResource RadioStyle}"
IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=IsChecked, Mode=TwoWay}">
<RadioButton.Content>
<Viewbox StretchDirection="DownOnly" Stretch="Uniform">
<ContentControl Content="{TemplateBinding Content}"/>
</Viewbox>
</RadioButton.Content>
</RadioButton>
</ControlTemplate>
谁能告诉我为什么会这样?
MSDN文档:
将
TargetType
属性设置为RadioButton
类型而不设置x:Key
将隐式地将x:Key
设置为{x:Type RadioButton }
。这也意味着如果你给上面的Style一个x:Key
值而不是{x:Type RadioButton}
,那么Style将不会自动应用到所有的RadioButton
元素。相反,您需要将样式显式地应用于RadioButton
元素,如"{StaticResource RadioStyle}"
。
指定一个键时需要使用该键。带有键的样式不会自动反映到切换按钮上。