我试图将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>
但是如果可能的话,我希望这更通用。再次感谢。
答案 0 :(得分: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 binidng是:
<DataTrigger Binding="{Binding IsReadOnly, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}}" Value="True">
在摘要中,查找父DataGridCell而不是DataGridTextColumn。原因是您尝试设置样式的TextBlock实际上并不是DataGridTextColumn的子项,而是DataGridTextColumn对等项的子项。