Wpf 如何在datagrid样式中添加单元格样式?

Wpf 如何在datagrid样式中添加单元格样式?,wpf,xaml,datagrid,Wpf,Xaml,Datagrid,我有一个datagrids风格的字典,我有: <Style TargetType="{x:Type DataGrid}" x:Key="DataGridDefault"> <Setter Property="HorizontalAlignment" Value="Stretch"/> <Setter Property="VerticalAlignment&quo

我有一个datagrids风格的字典,我有:

<Style TargetType="{x:Type DataGrid}" x:Key="DataGridDefault">
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="VerticalAlignment" Value="Stretch"/>
    <Setter Property="AutoGenerateColumns" Value="False"/>
    <Setter Property="IsReadOnly" Value="True"/>
    <Setter Property="MinHeight" Value="150"/>
    <Setter Property="HorizontalScrollBarVisibility" Value="Auto"/>
    <Setter Property="VerticalScrollBarVisibility" Value="Auto"/>

    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Black"/>
    </Style.Resources>
</Style>

我想在datagrid的样式中包含行的样式。我想要的行的样式是:

<DataGrid.RowStyle>
    <Style TargetType="DataGridRow">
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true" />
                </MultiDataTrigger.Conditions>
                <MultiDataTrigger.Setters>
                    <Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}"/>
                </MultiDataTrigger.Setters>
            </MultiDataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.RowStyle>

我尝试以这种方式添加它:

<Style TargetType="{x:Type DataGrid}" x:Key="DataGridDefault">
    <Setter Property="HorizontalAlignment" Value="Stretch"/>
    <Setter Property="VerticalAlignment" Value="Stretch"/>
    <Setter Property="AutoGenerateColumns" Value="False"/>
    <Setter Property="IsReadOnly" Value="True"/>
    <Setter Property="MinHeight" Value="150"/>
    <Setter Property="HorizontalScrollBarVisibility" Value="Auto"/>
    <Setter Property="VerticalScrollBarVisibility" Value="Auto"/>

    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <MultiDataTrigger>
                    <MultiDataTrigger.Conditions>
                        <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true" />
                    </MultiDataTrigger.Conditions>
                    <MultiDataTrigger.Setters>
                        <Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}"/>
                    </MultiDataTrigger.Setters>
                </MultiDataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
    
    <Style.Resources>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent"/>
        <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Black"/>
    </Style.Resources>
</Style>


但这是不可能的。其思想是为包含行样式的datagrid设置s样式,以避免必须在应用程序的每个datagrid中设置这两种样式,只需设置datagrid的样式,即可设置这两种样式。但是我不知道这是否可行。

RowStyle
属性添加一个
Setter
,并将样式添加为
Value

<Style TargetType="{x:Type DataGrid}" x:Key="DataGridDefault">
   <Setter Property="HorizontalAlignment" Value="Stretch" />
   <Setter Property="VerticalAlignment" Value="Stretch" />
   <Setter Property="AutoGenerateColumns" Value="False" />
   <Setter Property="IsReadOnly" Value="True" />
   <Setter Property="MinHeight" Value="150" />
   <Setter Property="HorizontalScrollBarVisibility" Value="Auto" />
   <Setter Property="VerticalScrollBarVisibility" Value="Auto" />
   <Setter Property="RowStyle">
      <Setter.Value>
         <Style TargetType="DataGridRow">
            <Style.Triggers>
               <MultiDataTrigger>
                  <MultiDataTrigger.Conditions>
                     <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true" />
                  </MultiDataTrigger.Conditions>
                  <MultiDataTrigger.Setters>
                     <Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}" />
                  </MultiDataTrigger.Setters>
               </MultiDataTrigger>
            </Style.Triggers>
         </Style>
      </Setter.Value>
   </Setter>
   <Style.Resources>
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
      <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent" />
      <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Black" />
   </Style.Resources>
</Style>

或者,如果希望两种样式分开,也可以这样做

<Style TargetType="DataGridRow" x:Key="DataGridRowDefault">
   <Style.Triggers>
      <MultiDataTrigger>
         <MultiDataTrigger.Conditions>
            <Condition Binding="{Binding IsSelected, RelativeSource={RelativeSource Self}}" Value="true" />
         </MultiDataTrigger.Conditions>
         <MultiDataTrigger.Setters>
            <Setter Property="Background" Value="{x:Static SystemColors.HighlightBrush}" />
         </MultiDataTrigger.Setters>
      </MultiDataTrigger>
   </Style.Triggers>
</Style>

<Style TargetType="{x:Type DataGrid}" x:Key="DataGridDefault">
   <Setter Property="HorizontalAlignment" Value="Stretch" />
   <Setter Property="VerticalAlignment" Value="Stretch" />
   <Setter Property="AutoGenerateColumns" Value="False" />
   <Setter Property="IsReadOnly" Value="True" />
   <Setter Property="MinHeight" Value="150" />
   <Setter Property="HorizontalScrollBarVisibility" Value="Auto" />
   <Setter Property="VerticalScrollBarVisibility" Value="Auto" />
   <Setter Property="RowStyle" Value="{StaticResource DataGridRowDefault}"/>
   <Style.Resources>
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
      <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightBrushKey}" Color="Transparent" />
      <SolidColorBrush x:Key="{x:Static SystemColors.InactiveSelectionHighlightTextBrushKey}" Color="Black" />
   </Style.Resources>
</Style>