WPF样式基于未按预期工作

时间:2016-02-11 10:02:11

标签: wpf xaml

为什么我的Radiobutton看起来不像一个togglebutton? 看看代码

<Style x:Key="ButtonBaseStyle" TargetType="{x:Type ButtonBase}">
<Setter Property="Height" Value="100" />
</Style>
<Style BasedOn="{StaticResource ButtonBaseStyle}" TargetType="{x:Type Button}" />
<Style BasedOn="{StaticResource ButtonBaseStyle}" TargetType="{x:Type ToggleButton}" />
<Style BasedOn="{StaticResource {x:Type ToggleButton}}" TargetType="{x:Type RadioButton}" />


<StackPanel>
    <Button>Button</Button>
    <ToggleButton>Toggle</ToggleButton>
    <RadioButton>Radio</RadioButton>
</StackPanel>

如果我删除它的按钮基础样式

1 个答案:

答案 0 :(得分:1)

RadioButton的外观不是ToggleButton因为您现在已经更改了ButtonBase->ToggleButton->RadioButton的样式层次结构(在WPF的派生类中覆盖样式和模板的顺序) )。

您新的样式层次结构最优先考虑ButtonBase的样式。因此,您有一个新的ToggleButton样式,该样式派生自ButtonBase,然后您使用该样式覆盖RadioButton样式。因此,没有人能够确定您覆盖了哪些属性,哪些属性是最终的属性集。

要了解此更改XAML,请执行以下操作:

    <Style BasedOn="{StaticResource {x:Type ToggleButton}}" TargetType="{x:Type ToggleButton}" />
    <Style BasedOn="{StaticResource {x:Type ToggleButton}}" TargetType="{x:Type RadioButton}" /> 

现在看看外观&amp;感受到你的RadioButton

preview

我没有澄清究竟发生了什么以及为什么ToggleButton不会受到太大影响。 但正如我所说的那样,关于在UI上呈现之前最终为控件构建的样式层次结构。