3

DataGridTextColumn如果它是只读的,我正在尝试将它的背景颜色设置为另一种颜色。我正在使用以下代码这样做:

<DataGridTextColumn Header="Test" IsReadOnly="True">
    <DataGridTextColumn.ElementStyle>
        <Style TargetType="{x:Type TextBlock}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsReadOnly, RelativeSource={RelativeSource Mode=FindAncestor,  AncestorType={x:Type DataGridTextColumn}}}" Value="True">
                    <Setter Property="Background" Value="LightGreen"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>

我没有运气,但是删除触发器会导致背景始终为浅绿色。数据触发器绑定有问题吗?我对 WPF 比较陌生,但这是我可以在网上找到的。理想情况下,这将在 App.XAML 中,因此它将适用于所有列,例如 this,那么是否有办法将其转换为样式?谢谢。

编辑 - - - - -

如果我通过 ElementName 绑定它可以工作:

<DataTrigger Binding="{Binding IsReadOnly, ElementName=stupid}" Value="True">
        <Setter Property="Foreground" Value="Red" />
</DataTrigger>

但是,如果可能的话,我希望这更通用。再次感谢。

4

1 回答 1

1

编辑:起初没有检查 DataGridTextColumn 上的背景属性。

这回答了你原来的问题 -

<DataGridTextColumn Header="Test" IsReadOnly="True" Binding="{Binding name}" x:Name="MyColumn">
 <DataGridTextColumn.ElementStyle>
  <Style TargetType="{x:Type TextBlock}">
   <Style.Triggers>
    <DataTrigger Binding="{Binding IsReadOnly, ElementName=MyColumn}" Value="True">
     <Setter Property="Background" Value="Orange" />
    </DataTrigger>
   </Style.Triggers>
  </Style>
 </DataGridTextColumn.ElementStyle>
</DataGridTextColumn>  

要回答您的第二个问题,您正在寻找的 DataTrigger 绑定是:

<DataTrigger Binding="{Binding IsReadOnly, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}}" Value="True">

在摘要中,查找父 DataGridCell 而不是 DataGridTextColumn。原因是您尝试设置样式的 TextBlock 实际上不是 DataGridTextColumn 的子级,而是 DataGridTextColumn 的对等端的子级。

于 2015-03-18T17:57:46.013 回答