如何在Windows Universal应用程序(Win10)中将样式基于默认样式?

时间:2015-11-24 17:20:23

标签: xaml windows-runtime windows-10 win-universal-app

在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时崩溃了。

还有什么想法?

1 个答案:

答案 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:键,因此必须明确设置网格的样式。这澄清了吗?