样式继承 - 如何细化自定义默认样式?
Style inheritance - how to refine a custom default style?
在 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 上不可用。正如 所建议的,我需要将 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
属性的样式作为给定类型的所有控件的标准?
顺便说一句, 没有回答我的问题,因为它展示了如何覆盖 WinRT / UWP 平台
中定义的 默认样式,而不是自定义样式默认样式。
你可以给你的默认样式一个x:Key
,然后根据这个样式制作一个没有x:Key
的空样式。此样式将应用于控件的所有实例,但基本上是第一种样式的 "reference"。比起您可以使用 x:Key
在第一个样式的基础上创建其他样式。这不是一个真正优雅的解决方案,但我认为你不能做得更好。
在 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 上不可用。正如 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
属性的样式作为给定类型的所有控件的标准?
顺便说一句,
你可以给你的默认样式一个x:Key
,然后根据这个样式制作一个没有x:Key
的空样式。此样式将应用于控件的所有实例,但基本上是第一种样式的 "reference"。比起您可以使用 x:Key
在第一个样式的基础上创建其他样式。这不是一个真正优雅的解决方案,但我认为你不能做得更好。