WPF - combine/link 多种样式合二为一
WPF - combine/link multiple styles into one
在我的 WPF 应用程序中,我想设置数据网格的样式。为此,我需要几个单独的样式(子样式),因为它们针对不同的控件。现在我想将它们组合成一种样式(主要样式)以通过 <DataGrid Style="{StaticResource MyDataGridStyle}">
将其设置为 xml
子样式的伪代码:
<ResourceDictionary>
<!-- sub styles -->
<Style x:Key="RowStyle" TargetType="Row">...</Style>
<Style x:Key="ColumnStyle" TargetType="Column">...</Style>
<Style x:Key="ColumnHeaderStyle" TargetType="ColumnHeader">...</Style>
<Style x:Key="SomeInnerElementStyle" TargetType="SomeInnerElement">...</Style>
</ResourceDictionary>
目前我正在通过
组合样式
<!-- inside the ResourceDictionary -->
<!-- main style -->
<Style x:Key="MyDataGridStyle" TargetType="DataGrid">
<Style.Resources>
<Style BasedOn="{StaticResource RowStyle}" TargetType="Row" />
... all other sub styles go here
</Style.Resources>
</Style>
有没有更优雅的方式在我的主样式中包含子样式? BasedOn
属性迫使我再次指定 TargetType
,这很痛苦,而且我不想包含“基于子样式的新样式”,而只是包含“子样式”。
设置对应的Style
属性:
<Style x:Key="MyDataGridStyle" TargetType="DataGrid">
<Setter Property="RowStyle" Value="{StaticResource RowStyle}" />
<Setter Property="ColumnStyle" Value="{StaticResource ColumnStyle}" />
<Setter Property="ColumnHeaderStyle" Value="{StaticResource ColumnHeaderStyle}" />
</Style>
在我的 WPF 应用程序中,我想设置数据网格的样式。为此,我需要几个单独的样式(子样式),因为它们针对不同的控件。现在我想将它们组合成一种样式(主要样式)以通过 <DataGrid Style="{StaticResource MyDataGridStyle}">
子样式的伪代码:
<ResourceDictionary>
<!-- sub styles -->
<Style x:Key="RowStyle" TargetType="Row">...</Style>
<Style x:Key="ColumnStyle" TargetType="Column">...</Style>
<Style x:Key="ColumnHeaderStyle" TargetType="ColumnHeader">...</Style>
<Style x:Key="SomeInnerElementStyle" TargetType="SomeInnerElement">...</Style>
</ResourceDictionary>
目前我正在通过
组合样式<!-- inside the ResourceDictionary -->
<!-- main style -->
<Style x:Key="MyDataGridStyle" TargetType="DataGrid">
<Style.Resources>
<Style BasedOn="{StaticResource RowStyle}" TargetType="Row" />
... all other sub styles go here
</Style.Resources>
</Style>
有没有更优雅的方式在我的主样式中包含子样式? BasedOn
属性迫使我再次指定 TargetType
,这很痛苦,而且我不想包含“基于子样式的新样式”,而只是包含“子样式”。
设置对应的Style
属性:
<Style x:Key="MyDataGridStyle" TargetType="DataGrid">
<Setter Property="RowStyle" Value="{StaticResource RowStyle}" />
<Setter Property="ColumnStyle" Value="{StaticResource ColumnStyle}" />
<Setter Property="ColumnHeaderStyle" Value="{StaticResource ColumnHeaderStyle}" />
</Style>