【问题标题】:How do I trigger a style change if DataContext is null or not using WPF如果 DataContext 为空或不使用 WPF,我如何触发样式更改
【发布时间】:2008-11-13 08:26:48
【问题描述】:

我有一个包含多个控件的页面。控件必须显示它们从页面的 DataContext 获得的值。如果 DataContext 为空,我想做的是显示页面的另一种外观。在某些情况下,无论是否设置了“their”属性,页面的控件应该以不同的方式显示。

是否可以创建一个绑定来查看是否设置了DataContext?

我的解决方法是将 IsDataContextSet 属性添加到页面并指定如下绑定:

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

这符合我的预期,但我觉得他们的方式更优雅。或至少或更多 WPFish 方式。

【问题讨论】:

    标签: wpf data-binding


    【解决方案1】:

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

    一个示例可能如下所示:

    <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>
    

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

    【讨论】:

    • 嗯,重读了你的问题,我觉得我并没有真正回答。
    • 这基本上是正确的答案。正常设置您的绑定/样式并向 DataContext is x:Null 添加触发器以切换到一组不同的样式/绑定。
    • 这实际上是我想要的。我太沉迷于 RelativeSource、FindAncestor、Self 什么语法,所以我忘记了我只想知道如何检查一个属性是否为空。
    猜你喜欢
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2011-09-01
    • 1970-01-01
    • 2010-12-18
    • 2017-10-02
    相关资源
    最近更新 更多