C# 根据datagrid中的选择更改ColumnHeaderStyle的背景色

C# 根据datagrid中的选择更改ColumnHeaderStyle的背景色,c#,wpf,C#,Wpf,我想出了如何突出感兴趣的一行。我可以获取我感兴趣的列的索引,并使用ScrollIntoView跳转到它。但是,它不会立即弹出给用户。我想突出显示专栏,或者更改专栏标题样式。我似乎不知道如何在xaml或代码隐藏中实现它 另一种选择是不突出显示整个行和列标题,而只突出显示感兴趣的单元格。我宁愿那样做,但我想不出来 我当前的DataGrid如下所示: <DataGrid x:Name="dtGridReads" AutoGenerateColumns="False"

我想出了如何突出感兴趣的一行。我可以获取我感兴趣的列的索引,并使用ScrollIntoView跳转到它。但是,它不会立即弹出给用户。我想突出显示专栏,或者更改专栏标题样式。我似乎不知道如何在xaml或代码隐藏中实现它

另一种选择是不突出显示整个行和列标题,而只突出显示感兴趣的单元格。我宁愿那样做,但我想不出来

我当前的DataGrid如下所示:

<DataGrid x:Name="dtGridReads"  AutoGenerateColumns="False" 
            VirtualizingStackPanel.IsVirtualizing="True"                                       
            VirtualizingStackPanel.VirtualizationMode ="Standard" 
              EnableColumnVirtualization="True"
              EnableRowVirtualization="True"
            ScrollViewer.IsDeferredScrollingEnabled="True"
            CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserSortColumns="True"
             ItemsSource ="{Binding}" Block.TextAlignment="Center"
             AlternatingRowBackground="#F1F1F1" RowBackground="White"
              CanUserAddRows="False" CanUserDeleteRows="False" FrozenColumnCount="1"
               GridLinesVisibility="None"                   ScrollViewer.ScrollChanged="dtGridReads_ScrollChanged">

    <DataGrid.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <Trigger Property="DataGridCell.IsSelected" Value="True">
                    <Setter Property="Background" Value="red" />
                    <Setter Property="BorderThickness" Value="0" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </DataGrid.CellStyle>

谢谢。

假设您需要根据选定的\突出显示的单元格突出显示数据gid列标题

为DataGridColumnHeader创建DataGrid范围的样式。在样式中包含一个数据触发器,用于检查列标题的内容与当前单元格列标题的内容是否相等。。。这意味着列标题属于当前单元格也属于的列。如果是这样,我们将更改标题的背景色

<toolkit:DataGrid x:Name="MyDataGrid"
      IsReadOnly="True"
      AutoGenerateColumns="False">
  <toolkit:DataGrid.Resources>
    <local:EqualityConverter x:Key="EqualityConverter"/>
    <Style TargetType="{x:Type toolkit:DataGridColumnHeader}">
      <Style.Triggers>
        <DataTrigger Value="True">
          <DataTrigger.Binding>
            <MultiBinding Converter="{StaticResource EqualityConverter}">
               <Binding Path="CurrentCell.Column.Header"
                  RelativeSource="{RelativeSource
                     AncestorType={x:Type toolkit:DataGrid}}"/>
                <Binding Path="Content"
                  RelativeSource="{RelativeSource Self}"/>
            </MultiBinding>
          </DataTrigger.Binding>
          <Setter Property="Background" Value="Red"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </toolkit:DataGrid.Resources>
  <toolkit:DataGrid.Columns>
    <toolkit:DataGridTextColumn Header="Key"
           Binding="{Binding Key, Mode=OneWay}"></toolkit:DataGridTextColumn>
    <toolkit:DataGridTextColumn Header="Value"
           Binding="{Binding Value, Mode=OneWay}"></toolkit:DataGridTextColumn>
  </toolkit:DataGrid.Columns>
</toolkit:DataGrid>

如果有帮助,请告诉我。

更改DataGridColumnHeader的背景非常困难,因为您需要重新构建样式。不确定这是否是您想要的,但您是否尝试在数据网格上设置SelectionUnit=CellOrRowHeader?@Meleak,我会对所选列使用什么触发器?我不确定我是否正确理解了您的问题,但我发布了一个答案,说明在选择DataGridColumn时如何使用触发器,这意味着在我完全不理解您的问题时选择了列中的单元格。你的标题是根据DataGrid中的选择更改ColumnHeaderStyle,我的回答正好说明了这一点。也许上传一张你想做什么的图片。是否要在滚动到的单元格中间画一个红十字?
<toolkit:DataGrid x:Name="MyDataGrid"
      IsReadOnly="True"
      AutoGenerateColumns="False">
  <toolkit:DataGrid.Resources>
    <local:EqualityConverter x:Key="EqualityConverter"/>
    <Style TargetType="{x:Type toolkit:DataGridColumnHeader}">
      <Style.Triggers>
        <DataTrigger Value="True">
          <DataTrigger.Binding>
            <MultiBinding Converter="{StaticResource EqualityConverter}">
               <Binding Path="CurrentCell.Column.Header"
                  RelativeSource="{RelativeSource
                     AncestorType={x:Type toolkit:DataGrid}}"/>
                <Binding Path="Content"
                  RelativeSource="{RelativeSource Self}"/>
            </MultiBinding>
          </DataTrigger.Binding>
          <Setter Property="Background" Value="Red"/>
        </DataTrigger>
      </Style.Triggers>
    </Style>
  </toolkit:DataGrid.Resources>
  <toolkit:DataGrid.Columns>
    <toolkit:DataGridTextColumn Header="Key"
           Binding="{Binding Key, Mode=OneWay}"></toolkit:DataGridTextColumn>
    <toolkit:DataGridTextColumn Header="Value"
           Binding="{Binding Value, Mode=OneWay}"></toolkit:DataGridTextColumn>
  </toolkit:DataGrid.Columns>
</toolkit:DataGrid>
public class EqualityConverter : IMultiValueConverter
{
    public object Convert(
            object[] values,
            Type targetType,
            object parameter,
            System.Globalization.CultureInfo culture)
    {
        if (values != null)
        {
            for (var i = 1; i < values.Count(); i++)
            {
                if (values[i] == null || !values[i].Equals(values[i-1]))
                {
                    return false;
                }
            }

            return true;
        }

        return false;
    }

    public object[] ConvertBack(
             object value,
             Type[] targetTypes,
             object parameter,
             System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}