【问题标题】:Assigning color in C# overrides Style. How can I prevent this? [duplicate]在 C# 中分配颜色会覆盖样式。我怎样才能防止这种情况? [复制]
【发布时间】:2020-12-18 04:08:31
【问题描述】:

我正在尝试自定义DataGrid。我有个问题。我已经研究过,但我找不到任何关于它的信息。

我为单元格创建了一个Style。在这种风格中,有一个MultiTrigger,如下面的代码所示。

<MultiDataTrigger>
   <MultiDataTrigger.Conditions>
      <Condition Binding="{Binding RelativeSource={RelativeSource Mode=Self}, Path=IsKeyboardFocusWithin}" Value="True"/>
      <Condition Binding="{Binding DataContext.Tek_Satiri_Guncelleme_Modu, RelativeSource={RelativeSource AncestorType={x:Type local:DataGrid_Ozellestirilebilir}}}" Value="False"/>
   </MultiDataTrigger.Conditions>
   <Setter Property="BorderBrush" Value="Blue"/>
</MultiDataTrigger>

这个Multitrigger像这样完美地工作;

这是静态 -->

当单元格处于焦点时-->

然后在 C# 中,我像这样更改单元格的颜色。

//Get row    
DataGridRow dataGridRow = (DataGridRow)DataGrid_1.ItemContainerGenerator.ContainerFromIndex(5);
//Get cell    
DataGridCell cell = (DataGridCell)DataGrid_1.Columns[5].GetCellContent(dataGridRow).Parent;
cell.BorderBrush = Brushes.White; //This color i see when cell is in focus.

当我运行应用程序时,此代码会覆盖(我猜)我的自定义 Style,当单元格处于焦点时我看不到蓝色。我看到白了。

边框颜色按预期变为白色-->

这是当单元格处于焦点时我应该看到的。但我看到的是白色。-->

谁能帮我解决这种情况?

编辑:

thatguy 对这种情况做了很好的解释,并给出了两个解决方案。但有一个问题。该解决方案仅适用于一种颜色。所以如果我想改变多个单元格的颜色,它们必须都是相同的颜色。我需要以不同的方式调整不同单元格的颜色。这种情况也有解决办法吗?

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    这是由于本地值优先于Style 触发器造成的,请参阅documentation。

    1. 本地值。可以通过“包装器”属性的便利设置本地值,这也等同于在 XAML 中设置为属性或属性元素,[...]
    1. 样式触发器。来自页面或应用程序的样式中的触发器(这些样式可能是显式或隐式样式,但不是来自优先级较低的默认样式)。

    要解决此问题,您可以使用以下选项之一。

    • 尝试将White 颜色与其他触发器集成到您现有的样式中

    • 根据您当前的样式创建另一种样式,并为颜色White 添加一个设置器,并将此样式分配给需要不同样式的单元格

      <Style x:Key="MySpecialCellStyle" BasedOn="{StaticResource MyCellStyle}" TargetType="{x:Type DataGridCell}">
         <Setter Property="BorderBrush" Value="White"/>
      </Style>
      
      cell.Style = (Style)FindResource("MySpecialCellStyle");
      

    【讨论】:

    • 感谢非常好的解释。但是我有一个问题。这仅适用于一种颜色。如果我想以不同方式调整不同单元格的颜色怎么办?我会相应地更新我的问题。
    • @Schiaparelli 如果我理解正确,它是一样的,要么通过为需要不同颜色的状态创建额外的触发器来调整你的风格,要么为每种情况创建一个专门的风格并将其分配给相应的细胞。由于基本样式包含大多数继承到专用样式的触发器和设置器,因此这些将是最小的,如本例所示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多