Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 选择时更改DataGrid中单个单元格的颜色,覆盖当前颜色_Wpf_Xaml_Datagrid - Fatal编程技术网

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>