绑定到ElementName取决于绑定顺序

时间:2018-10-09 09:00:39

标签: xaml binding uwp visualstates xbind

我创建了简单的StateTrigger来绑定到FrameworkElement Width属性。有三个依赖项属性:MinValueMaxValueElement。它们的类型分别为doubledoubleFrameworkElement

我注意到,根据绑定顺序,它可能会或可能不会起作用。

这很好。

<local:ElementWidthTrigger MaxValue="1000"
                           MinValue="800"
                           Element="{Binding ElementName=LayoutRoot}" />

这不是。

<local:ElementWidthTrigger Element="{Binding ElementName=LayoutRoot}"
                           MaxValue="1000"
                           MinValue="800" />

注意到这两个示例中唯一的区别是Element属性绑定顺序。

ElementWidthTrigger中,每个依赖项属性都有属性更改回调。而当Element位于最顶端时,无论如何都不会调用回调。

x:Bind解决了此问题,无论使用什么顺序,但仍然存在问题。谁能解释为什么Element属性无法根据绑定顺序进行绑定?

在Windows 10 1803内部版本17134.320上运行。

可以找到工作示例项目here

2 个答案:

答案 0 :(得分:3)

感谢您报告此问题并提供可靠的repro项目-这是平台错误。我已经将其记录在我们的数据库中并分配给了正确的团队。再次感谢!

答案 1 :(得分:2)

哇,这是一个谜!虽然我无法找出问题的原因,但确实确实像是UWP中的错误。我注意到,将x:Name添加到VisualStates中的一个简单动作将使ElementName一阶操作按预期工作:

<VisualState x:Name="Test">
    <VisualState.StateTriggers>
        <local:ElementWidthTrigger Element="{Binding ElementName=LayoutRoot}"
                                   MaxValue="1000"
                                   MinValue="800" />
    </VisualState.StateTriggers>

    <VisualState.Setters>
        <Setter Target="Rectangle.Fill" Value="Blue" />
    </VisualState.Setters>
</VisualState>

UWP团队的某人看到了这一点并给予了帮助,将是一件很棒的事,因为它可能需要深入了解内部情况才能了解发生的情况。