2016-05-30 165 views
3

我正在嘗試創建自定義的用戶控件。我創建資源字典文件(主題\ 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))); 

我如何爲我的自定義控件應用第二種風格? 我需要同時應用兩種樣式。

+2

嘗試將'DataGridColumnHeader'樣式放入'HeaderFilterDataGrid'樣式的'Style.Resources'中。 – Clemens

+0

它的工作原理!謝謝! – Stopee

回答

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> 
相關問題