gpt4 book ai didi

wpf - RelativeSource 数据触发器绑定(bind)不起作用

转载 作者:行者123 更新时间:2023-12-04 18:04:46 24 4
gpt4 key购买 nike

我正在尝试将 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>

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

编辑------------

如果我通过 ElementName 进行绑定(bind),它会起作用:

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

不过,如果可能的话,我希望它更通用。再次感谢。

最佳答案

编辑:一开始没有检查 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 绑定(bind)是:

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

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

关于wpf - RelativeSource 数据触发器绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29129117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com