我创建了简单的StateTrigger
来绑定到FrameworkElement
Width
属性。有三个依赖项属性:MinValue
,MaxValue
和Element
。它们的类型分别为double
,double
和FrameworkElement
。
我注意到,根据绑定顺序,它可能会或可能不会起作用。
这很好。
<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。
答案 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团队的某人看到了这一点并给予了帮助,将是一件很棒的事,因为它可能需要深入了解内部情况才能了解发生的情况。