样式继承 - 如何优化自定义默认样式?

时间:2016-08-08 09:33:53

标签: xaml winrt-xaml uwp

在WinRT / UWP应用程序中(两个平台都出现问题),我可以通过省略x:Key属性来定义适用于某个控件的所有实例的样式,例如:

<Style TargetType="Button">
    <Setter Property="Width" Value="400"/>
</Style>

现在,除了此默认样式之外,我还想将某些属性应用于某些按钮

<Style TargetType="Button" x:Key="TallButtonStyle" BasedOn="...">
    <Setter Property="Height" Value="100"/>
</Style>

问题是:要填充BasedOn属性的内容,以便此样式继承上面定义的默认样式?

在WPF中,我可以执行以下操作:

<Style TargetType="Button" x:Key="..." BasedOn="{StaticResource  {x:Type Button}}">

但是,x:Type在WinRT / UWP上不可用。正如this answer所示,我需要为默认样式指定x:Key,以便能够从中继承:

<Style TargetType="Button" x:Key="WideButtonStyle">
    <Setter Property="Width" Value="400"/>
</Style>
<Style TargetType="Button" x:Key="TallButtonStyle" BasedOn="{StaticResource Button}">
    <Setter Property="Height" Value="100"/>
</Style>

但是,在这种情况下,WideButtonStyle不再用作默认值,我需要手动将Style="{StaticResource WideButtonStyle}"应用于我的所有按钮,这对我来说是不必要的开销。< / p>

有没有办法,要么

  1. 设置样式的BasedOn属性以指向相应控件的默认样式,或
  2. 设置一个包含x:Key属性的样式,作为给定类型的所有控件的标准使用?
  3. BTW,this related topic没有回答我的问题,因为它显示了如何覆盖WinRT / UWP平台中定义的默认样式,而不是定制的默认样式。

1 个答案:

答案 0 :(得分:2)

您可以将默认样式设为x:Key,然后根据此样式制作不带x:Key的空样式。此样式将应用于控件的所有实例,但基本上将是&#34;引用&#34;第一种风格。您可以根据x:Key的第一个样式创建其他样式。不是一个优雅的解决方案,但我认为你不能做得更好。