【问题标题】:Dynamic binding between control in WP7 XAMLWP7 XAML 中控件之间的动态绑定
【发布时间】:2011-07-21 20:53:37
【问题描述】:

我试图在 WP7 XAML 中画一条简单的线,如下所示。使用静态坐标值,这可以正常工作。

<Line Stroke="White" 
      X1="1" Y1="1" 
      X2="200" Y2="1" />

我需要的是根据匹配的属性值(例如其 IdName)绑定相对于同一 Canvas 上的其他控件的坐标值。绑定正确的控件后,我需要获取其 Left 和/或 Top 画布位置。使用模糊的伪代码,这就是我想要做的......

<Line Stroke="White" 
      X1="{Binding Canvas.Left, Source={Binding <a_control_where_a_property_equals_some_value>}}" Y1="1" 
      X2="200" Y2="1" />

我尝试了许多绑定方案,但均未成功。额外的复杂性在于这是 Windows Phone 7 (WP7) 绑定,而不是完整的 XAML。

注意:所有控件都是在运行时添加的,因此它们不是静态定义的。

有什么建议吗???

【问题讨论】:

  • 你所要求的并不是真的可以说。您正在谈论遍历可视化树,寻找一个控件,它的绑定具有一个给定值的属性。您需要更好地解释,或发布更多代码。

标签: c# wpf xaml windows-phone-7


【解决方案1】:

您可以期待的最好的结果是使用ElementName。除此之外,您需要在两个控件都绑定到的某个地方公开一个公共属性。可能在视图模型中,但这取决于您的设置。

元素名称示例:

<Canvas>
    <Line x:Name="line1" Stroke="White" X1="1" Y1="1"  X2="200" Y2="1" />
    <Line Stroke="White" X1="{Binding ElementName=line1, Path=X1}" Y1="10"  X2="200" Y2="1" />
</Canvas>

【讨论】:

  • 感谢您的快速反馈,您能否提供一个示例,说明如何使用 ElementName 绑定获取 Canvas.Left 值?顺便说一句,这可能是我需要删除 XAML 并在 XNA 中执行此部分的情况吗?
  • @Joe - 我添加了一个示例。这完全取决于你在做什么,所以我不能说另一种方式是否更好。我可能会建议将两者都绑定到一个公共属性,因为这通常是一个更好的设计(即像视图模型)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
相关资源
最近更新 更多