设置自定义控件的样式

时间:2016-05-30 09:38:58

标签: c# wpf xaml

我正在尝试创建自定义用户控件。我创建了两个样式的ResourceDictionary文件(Themes \ Generic.xaml):

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit"
    xmlns:themes="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
    xmlns:components="clr-namespace:ORPO.WPF.Components">

    <Style TargetType="{x:Type components:HeaderFilterDataGrid}" BasedOn="{StaticResource {x:Type DataGrid}}">
        ...
    </Style>
    <Style TargetType="{x:Type DataGridColumnHeader}">
        ...
    </Style>
</ResourceDictionary>

和我的自定义控件类:

public class HeaderFilterDataGrid : DataGrid
    {
...
static HeaderFilterDataGrid()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(HeaderFilterDataGrid),
new FrameworkPropertyMetadata(typeof(HeaderFilterDataGrid)));            
        }
...
}

当我应用第一个样式

时,它工作正常
DefaultStyleKeyProperty.OverrideMetadata(typeof(HeaderFilterDataGrid),
    new FrameworkPropertyMetadata(typeof(HeaderFilterDataGrid)));   

如何为自定义控件应用第二种样式? 我需要同时应用这两种样式。

1 个答案:

答案 0 :(得分:3)

DataGridColumnHeader样式放在HeaderFilterDataGrid样式的资源中。这种方式DataGridColumnHeader将是HeaderFilterDataGrid中所有DataGridColumnHeaders的默认样式。

<ResourceDictionary ...>
    <Style TargetType="{x:Type components:HeaderFilterDataGrid}"
           BasedOn="{StaticResource {x:Type DataGrid}}">
        <Style.Resources>
            <Style TargetType="{x:Type DataGridColumnHeader}">
            ...
            </Style>
        </Style.Resources>
        ...
    </Style>
</ResourceDictionary>