如果DataContext为null或未使用WPF,如何触发样式更改

如果DataContext为null或未使用WPF,如何触发样式更改,wpf,data-binding,Wpf,Data Binding,我有一个有几个控件的页面。这些控件绑定到显示它们从页面的DataContext获取的值。我想做的是在DataContext为null时显示页面的另一个外观。在某些情况下,如果设置或未设置“其”属性,则页面的控件应以不同方式显示 是否可以创建绑定以查看是否设置了DataContext 我所做的变通方法是向页面添加IsDataContextSet属性,并指定绑定,如: Binding="{Binding RelativeSource={RelativeSource FindAncestor, Anc

我有一个有几个控件的页面。这些控件绑定到显示它们从页面的DataContext获取的值。我想做的是在DataContext为null时显示页面的另一个外观。在某些情况下,如果设置或未设置“其”属性,则页面的控件应以不同方式显示

是否可以创建绑定以查看是否设置了DataContext

我所做的变通方法是向页面添加IsDataContextSet属性,并指定绑定,如:

Binding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Page}}, Path=IsDataContextSet}" Value="false"

这是我所期望的,但我有一种感觉,他们更优雅的方式来做到这一点。或者至少有一种或更多的WPFish方式。

根据您描述的场景,我将使用样式和数据触发器设置属性。数据触发器将使用默认绑定,即数据上下文

示例可能如下所示:

<Border>
    <Border.Style>
        <Style TargetType="Border">
            <Setter Property="Background"
                    Value="Orange" />
            <Style.Triggers>
                <DataTrigger Binding="{Binding}"
                             Value="{x:Null}">
                    <Setter Property="Background"
                            Value="Yellow" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Border.Style>
</Border>


除非数据上下文为空,否则边框将为橙色,在这种情况下背景为黄色。

Hmm,在重新阅读您的问题后,我认为我没有真正回答它。这基本上是正确的答案。将绑定/样式设置为正常,并向DataContext is x:Null添加一个触发器,以切换到不同的样式/绑定集。这实际上就是我要寻找的。我被RelativeSource、FindAncestor、Self等语法深深吸引,所以我忘记了我想知道的只是如何检查属性是否为null。