【发布时间】:2016-12-14 00:30:57
【问题描述】:
在 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}" 应用于我的所有按钮,这对我来说是不必要的开销。
有什么办法吗
- 将样式的
BasedOn属性设置为指向相应控件的默认样式,或者 - 设置包含
x:Key属性的样式作为给定类型的所有控件的标准?
顺便说一句,this related topic 没有回答我的问题,因为它显示了如何覆盖 WinRT / UWP 平台中定义的默认样式,而不是自定义的默认样式。
【问题讨论】:
标签: xaml winrt-xaml uwp