1

我有两个类似于节点的自定义控件和在节点之间绘制链接的控件。

我希望尽可能多地用 xaml 编写这两个控件。该链接将两个节点都存储为依赖属性,并且每当节点移动时,我都会使用数据绑定来移动节点之间的线。

能够根据两个节点之间的距离更改线条的其他值(例如笔划宽度)会很棒。因此,当任一节点移动时,该属性都需要更新,我无法完全理解它是如何工作的。

有人有什么想法吗?

4

2 回答 2

1

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

  1. 与上一篇文章一样,在链接类上定义宽度、笔触(无论您需要什么)属性
  2. 定义应用于该属性的多重绑定,将您的两个节点传递给它应该如下所示的绑定:

<Multibinding Converter="{StaticResource converter}">
<Binding Path="Node1" RelativeSource|Source.../>
<Binding Path="Node2" ... />
</Multibinding>

  1. 实现接口IMultiValueConverter,它基本上会根据节点之间的距离计算笔画应该是什么样子。

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

该解决方案的优点是,您拥有非常清晰的类模型,并且每个类都执行简单的任务。此外,稍后,您可以配置您的转换器类以支持额外的情况,而无需触及节点类,该类保持简单并且仅用于显示节点。

通常,每当您必须将多个属性值映射到另一个属性时,您都必须使用多重绑定和转换器。

于 2008-09-22T23:46:29.470 回答
0

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

我想你也可以尝试用 DataTriggers 做一些事情,但它们需要特定的值才能使用——你不能使用任何类型的表达式。这将使解决方案难以很好地扩展到节点之间的广泛距离。

于 2008-09-20T20:43:34.873 回答