自动样式继承

时间:2012-11-21 08:37:50

标签: wpf

我对自动样式继承有疑问。

基本上,我有一个超类,我想为其定义文本框和文本块的默认样式。这些样式基于Styles.xaml中定义的默认样式。

<controls:BaseUserControl.Resources>

    <Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource DisplayLabel}">
        <Setter Property="Foreground" Value="Black"/>
        <Setter Property="Margin" Value="10,0,10,0"/>
        <Setter Property="HorizontalAlignment" Value="Left"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
    </Style>

    <Style TargetType="{x:Type TextBox}" BasedOn="{StaticResource InputField}">
        <Setter Property="Height" Value="30"/>
        <Setter Property="Margin" Value="10,0,0,0"></Setter>
        <Setter Property="HorizontalAlignment" Value="Left"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
    </Style>

</controls:BaseUserControl.Resources>

此类称为DataEntryView

现在,当我从这个类派生时,文本块和文本框只是得到它们的默认Windows外观,而不是我在这里定义的内容。

<views:DataEntryView.Resources>
    <!-- Do I need to add anything here? -->
</views:DataEntryView.Resources>

我忘记了什么?

基本上,我不想将每个文本块和文本框的样式显式设置为某个键。

1 个答案:

答案 0 :(得分:0)

您需要将样式放在RessourceDictionary中,并使用RessourceDictionary.MergedDictionaries属性将其包含在超类和派生类中。

样式文件(Styles.xaml)

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" ....>
    <Style ...> <!--Your styles goes here-->
</ResourceDictionary>

控件(父级和子级):

<UserControl.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</UserControl.Resources>