2008-09-20 241 views
1

我有两个自定义控件,类似于节点和绘制节点之间链接的控件。将属性数据绑定到两个依赖项属性

我想尽可能在​​xaml中写入尽可能多的控件。链接将这两个节点存储为依赖项属性,并且每当节点移动时,我都使用数据绑定来移动节点之间的连线。

根据两个节点之间的距离,能够改变线条的某些其他值,例如笔画宽度,将会很棒。所以当任何一个节点移动时,属性都需要更新,而且我无法理解这种方式的效果。

任何人有任何想法?

回答

1

,你可以尝试做这样的事情:

  1. 在以前的帖子定义你的链接类的宽度,中风(无论你需要)财产
  2. 定义适用于财产multibinding,通过你的两个节点的绑定 它应该看起来像:

< Multibinding转换器= “{StaticResource的转换器}” >
<绑定路径= “节点1” 的RelativeSource |源.../>
<绑定路径= “节点2” .../>
</Multibinding >

  • 实现接口IMultiValueConverter,基本上根据节点之间的距离来计算笔画看起来应该是什么样子。

  • 在xaml中创建转换器的实例,并将其添加到您的多重绑定的Converter属性中。

  • 这个解决方案的优点是,你有非常清晰的类模型,每个类都做简单的任务。此外,稍后,您可以配置转换器类以支持额外的情况,而不需要接触节点类,该节点类保持简单并且仅为显示节点而设计。

    一般来说,无论何时必须将多个属性值映射到另一个属性,都必须使用多重绑定和转换器。

    0

    您可以在链接类中定义一个属性StrokeWidth,每当节点移动时计算该属性的StrokeWidth,然后将适当的样式属性绑定到它。

    我想你也可以尝试使用DataTriggers做些事情,但他们需要特定的值来处理 - 你不能使用任何类型的表达式。这会使解决方案很难很好地适应节点之间的广泛距离。

    +0

    我目前在xaml中的代码隐藏和数据绑定中使用了一个属性。当任一节点移动时,他们会告诉任何链接要更新。尽管对WPF没有经验,但它并不是最优雅的解决方案。 – tenpn 2008-09-20 22:33:06