在WPF中,如果你想将一个样式基于控件的默认样式,你会说:
<Style TargetType="customControls:ResponsiveGridView" BasedOn="{StaticResource {x:Type GridView}}">
但是,UAP不支持x:Type - 我该怎么办呢?我尝试了以下方法 - 无效(在将XAML定义为GridView所在的命名空间的别名之后)。
<Style TargetType="customControls:ResponsiveGridView" BasedOn="{StaticResource xaml:GridView}">
<Style TargetType="customControls:ResponsiveGridView" BasedOn="xaml:GridView">
这些都不起作用 - 解析XAML时崩溃了。
还有什么想法?
答案 0 :(得分:3)
你仍然可以使用&#34; BasedOn&#34;用于继承样式。
<Page.Resources>
<Style TargetType="Button" x:Key="MyOtherStyle">
<Setter Property="Background" Value="Red"></Setter>
</Style>
<Style TargetType="Button" BasedOn="{StaticResource MyOtherStyle}" >
<Setter Value="Green" Property="Foreground"></Setter>
</Style>
</Page.Resources>
只需定义上述资源即可。它们将应用于页面上的每个按钮。
<Button Content="Hello"></Button>
要基于控件的默认样式,您不能使用&#34; BasedOn&#34;。您可以通过在样式中指定TargetType来隐式地基于控件的默认样式。
更准确地说明您的特殊情况: 如果要为自定义控件使用(隐式)样式,该样式基于内置控件的默认样式,请执行以下操作: 创建以内置控件类型为目标的自定义样式。像这样:
<Page.Resources>
<Style TargetType="Grid" x:Key="MyStyle1" >
<Setter Property="Background" Value="Green"></Setter>
</Style>
...
然后添加另一种定位您的自定义控件类型的样式,该样式基于内置控件的自定义样式。像这样:
...
<Style TargetType="local:MyCustomGrid" BasedOn="{StaticResource MyStyle1}">
<Setter Property="BorderBrush" Value="Black"></Setter>
<Setter Property="BorderThickness" Value="4"></Setter>
</Style>
</Page.Resources>
所有MyCustomGrid控件都将隐式获取基于默认样式的样式。
所有标准网格都将保留其默认样式,因为它们无法隐式获取样式,因为您在第一种样式中指定了x:键,因此必须明确设置网格的样式。这澄清了吗?