如果给定x:Key
我为ControlTemplate
设置了以下样式和ToggleButtons
,它们可以按照我的意愿运作。
<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>
但是,当我向x:Key
提供Style
而RadioButton
中的ControlTemplate
会继承样式,如下所示,
渲染结果与上面代码给出的结果不同。
<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>
有人能告诉我为什么会这样吗?
答案 0 :(得分:2)
MSDN文档:
将
TargetType
属性设置为RadioButton
类型而不设置x:Key
会隐式将x:Key
设置为{x:Type RadioButton }
。这也意味着,如果您为上述样式提供除x:Key
以外的任何值的{x:Type RadioButton}
值,则样式不会自动应用于所有RadioButton
元素。相反,您需要将样式明确地应用于RadioButton
元素,如"{StaticResource RadioStyle}"
。
答案 1 :(得分:1)
指定密钥时需要使用密钥。 带键的Style不会自动反映到togglebuttons。