Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf RelativeSource数据触发器绑定不工作_Wpf_Styles_Wpf Style - Fatal编程技术网

Wpf RelativeSource数据触发器绑定不工作

Wpf RelativeSource数据触发器绑定不工作,wpf,styles,wpf-style,Wpf,Styles,Wpf Style,我正在尝试将DataGridTextColumn的背景色设置为另一种颜色(如果它是只读的)。我使用以下代码执行此操作: <DataGridTextColumn Header="Test" IsReadOnly="True"> <DataGridTextColumn.ElementStyle> <Style TargetType="{x:Type TextBlock}"> <Style.Triggers>

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


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

编辑:起初没有检查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。原因是,您尝试设置样式的文本块实际上不是DataGridTextColumn的子项,而是DataGridTextColumn的对等项的子项。

谢谢。但是,我需要设置
DataGridTextColumn
元素的背景,即它的
TextBlock
DataGridTextColumn
没有
Background
属性。Ah没有尝试VS中的第一位。更新了我的答案-再次检查是否有效。你知道有没有可能让它更通用?可能是应用于整个应用程序的样式,而不是按名称命名?也许一个新的问题更适合我,我不确定。我被难住了一点-检查视觉树找到了解决方案。搜索祖先类型“DataGridCell”-相应地更新了我的答案。您可以将其放入模板中,并在整个应用程序中使用。