我有两个类似于节点的自定义控件和在节点之间绘制链接的控件。
我希望尽可能多地用 xaml 编写这两个控件。该链接将两个节点都存储为依赖属性,并且每当节点移动时,我都会使用数据绑定来移动节点之间的线。
能够根据两个节点之间的距离更改线条的其他值(例如笔划宽度)会很棒。因此,当任一节点移动时,该属性都需要更新,我无法完全理解它是如何工作的。
有人有什么想法吗?
我有两个类似于节点的自定义控件和在节点之间绘制链接的控件。
我希望尽可能多地用 xaml 编写这两个控件。该链接将两个节点都存储为依赖属性,并且每当节点移动时,我都会使用数据绑定来移动节点之间的线。
能够根据两个节点之间的距离更改线条的其他值(例如笔划宽度)会很棒。因此,当任一节点移动时,该属性都需要更新,我无法完全理解它是如何工作的。
有人有什么想法吗?
你可以尝试做这样的事情:
<Multibinding Converter="{StaticResource converter}">
<Binding Path="Node1" RelativeSource|Source.../>
<Binding Path="Node2" ... />
</Multibinding>
实现接口IMultiValueConverter,它基本上会根据节点之间的距离计算笔画应该是什么样子。
在 xaml 创建转换器的实例,并将其添加到多重绑定的 Converter 属性中。
该解决方案的优点是,您拥有非常清晰的类模型,并且每个类都执行简单的任务。此外,稍后,您可以配置您的转换器类以支持额外的情况,而无需触及节点类,该类保持简单并且仅用于显示节点。
通常,每当您必须将多个属性值映射到另一个属性时,您都必须使用多重绑定和转换器。
您可以在链接类中定义一个属性 StrokeWidth,每次节点移动时都会计算该属性,然后将适当的样式属性绑定到它。
我想你也可以尝试用 DataTriggers 做一些事情,但它们需要特定的值才能使用——你不能使用任何类型的表达式。这将使解决方案难以很好地扩展到节点之间的广泛距离。