相对源数据触发器绑定不起作用。

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中,这样它就可以适用于所有列,那么是否有一种方法将其转换为样式?谢谢。
编辑---------
如果我按ElementName绑定,它就能正常工作:
<DataTrigger Binding="{Binding IsReadOnly, ElementName=stupid}" Value="True">
        <Setter Property="Foreground" Value="Red" />
</DataTrigger>

然而,如果可能的话,我希望这更加通用。再次感谢。
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的对等元素的子元素。

谢谢。不过,我需要设置 DataGridTextColumn 元素的背景色,即它的 TextBlockDataGridTextColumn 没有 Background 属性。 - Sloth Armstrong
啊,我没有在VS中尝试第一部分。我更新了我的答案-请再次检查。 - Clark
谢谢,这个可以用于解决问题。你知道是否有可能使它更通用化?也许应该应用于整个应用程序而不是逐个命名?也许提出一个新的问题更合适,我不确定。 - Sloth Armstrong
让我有点困惑 - 检查可视树找到了解决方案。搜索祖先类型“DataGridCell” - 相应地更新了我的答案。您可以将其放入模板中并在整个应用程序中使用。 - Clark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接