Wpf 选择时更改DataGrid中单个单元格的颜色,覆盖当前颜色
我有一个影响整个数据网格行的代码:Wpf 选择时更改DataGrid中单个单元格的颜色,覆盖当前颜色,wpf,xaml,datagrid,Wpf,Xaml,Datagrid,我有一个影响整个数据网格行的代码: <DataGrid x:Name="tblopenRequests" ItemsSource="{Binding}" Grid.Column="1" Grid.Row="2" IsReadOnly="true" RowHeaderWidth="0" AutoGenerateColumns="False&q
<DataGrid x:Name="tblopenRequests" ItemsSource="{Binding}" Grid.Column="1" Grid.Row="2"
IsReadOnly="true" RowHeaderWidth="0" AutoGenerateColumns="False" CanUserAddRows="False" SelectionMode="Single">
<DataGrid.Resources>
<Style BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}" >
<Setter Property="Background" Value="LightSeaGreen" />
<Setter Property="Foreground" Value="white" />
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickness" Value="1 1 1 1"/>
<Setter Property="Margin" Value="-1,-1,0,0" />
<Setter Property="Height" Value="28" />
<Setter Property="Width" Value="auto"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
</Style>
<Style TargetType="DataGridCell">
<Setter Property="HorizontalContentAlignment" Value="Right" />
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="Goldenrod" />
<Setter Property="BorderBrush" Value="white" />
<Setter Property="Foreground" Value="black" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontSize" Value="15"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
现在,我想用不同的格式覆盖行中的一个单元格,使其更加突出
这是我目前所拥有的一切,但我的尝试一直失败
<DataGridTextColumn Binding="{Binding expectedDate}" Header="Expected Date" Width="90">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
我试着在这里添加一个agger,只给单元格着色。但是,这没有做任何事情,只是在参考资料部分保留了上面代码中的橙色
我只需要这个单格粉红色/浅红色而不是橙色,但是我找不到一个有这个答案的网站或论坛文章。带绑定的单格样式
在单元格样式中,您可以参考相关列并识别它,例如通过比较其标题
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<!-- ...other setters. -->
<Style.Triggers>
<!-- ...other triggers. -->
<DataTrigger Binding="{Binding Column.Header, RelativeSource={RelativeSource Self}}" Value="Expected Date">
<Setter Property="Background" Value="Pink" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
使用标题
识别列很麻烦而且容易出错。不幸的是,在您可以使用的列上没有内置的唯一标识符。但是,可以创建附着的特性
public static class DataGridColumnProperties
{
public static readonly DependencyProperty IdentifierProperty = DependencyProperty.RegisterAttached("Identifier",
typeof(string), typeof(DataGridColumnProperties), new PropertyMetadata(null));
public static string GetIdentifier(DependencyObject dependencyObject)
{
return (string)dependencyObject.GetValue(IdentifierProperty);
}
public static void SetIdentifier(DependencyObject dependencyObject, string value)
{
dependencyObject.SetValue(IdentifierProperty, value);
}
}
使用此附加属性,可以在列上设置标识符
<DataGridTextColumn local:DataGridColumnProperties.Identifier="ExpectedDate" ...>
橙色我没有在您的代码/XAML中找到橙色。这是否回答了您的问题@GlennAngel:你知道DataGridColumn
有一个CellStyle
属性,你可以为每一列设置Style
?谢谢@mm8,我会研究它和答案。第一次在WPF上如此大的学习曲线!
<DataGridTextColumn local:DataGridColumnProperties.Identifier="ExpectedDate" ...>
<DataTrigger Binding="{Binding Column.(local:DataGridColumnProperties.Identifier), RelativeSource={RelativeSource Self}}" Value="ExpectedDate">
<Setter Property="Background" Value="Pink" />
</DataTrigger>
<DataGrid x:Name="tblopenRequests" ItemsSource="{Binding}" Grid.Column="1" Grid.Row="2"
IsReadOnly="true" RowHeaderWidth="0" AutoGenerateColumns="False" CanUserAddRows="False" SelectionMode="Single">
<DataGrid.Resources>
<!-- Style from your question. -->
<Style x:Key="RegularCellStyle" TargetType="DataGridCell">
<Setter Property="HorizontalContentAlignment" Value="Right" />
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="Goldenrod" />
<Setter Property="BorderBrush" Value="white" />
<Setter Property="Foreground" Value="black" />
<Setter Property="FontWeight" Value="Bold" />
<Setter Property="FontSize" Value="15" />
</Trigger>
</Style.Triggers>
</Style>
<!-- Special first column style based on the regular style. -->
<Style x:Key="SpecialCellStyle"
BasedOn="{StaticResource RegularCellStyle}"
TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="DataGridCell.IsSelected" Value="True">
<Setter Property="Background" Value="Pink" />
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<DataGrid.CellStyle>
<StaticResource ResourceKey="RegularCellStyle" />
</DataGrid.CellStyle>
<DataGrid.ColumnHeaderStyle>
<Style BasedOn="{StaticResource {x:Type DataGridColumnHeader}}" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="Background" Value="LightSeaGreen" />
<Setter Property="Foreground" Value="white" />
<Setter Property="BorderBrush" Value="Black" />
<Setter Property="BorderThickness" Value="1,1,1,1" />
<Setter Property="Margin" Value="-1,-1,0,0" />
<Setter Property="Height" Value="28" />
<Setter Property="Width" Value="auto" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGrid.ColumnHeaderStyle>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding expectedDate}"
Header="Expected Date"
Width="90"
CellStyle="{StaticResource SpecialCellStyle}"/>
<!-- ...other columns WITHOUT cell style will apply the regular style. -->
</DataGrid.Columns>
</DataGrid>