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