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