将属性数据绑定到两个依赖属性中的任何一个

Posted

技术标签:

【中文标题】将属性数据绑定到两个依赖属性中的任何一个【英文标题】:databinding a property to either of two dependency properties 【发布时间】:2008-09-20 20:28:15 【问题描述】:

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

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

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

有人有什么想法吗?

【问题讨论】:

【参考方案1】:

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

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

多重绑定>

    实现接口IMultiValueConverter,它基本上会根据节点之间的距离计算笔画的样子。

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

我目前在代码隐藏中使用一个属性,并在 xaml 中将其数据绑定到它。当任一节点移动时,它们会告诉任何链接进行更新。尽管对 WPF 缺乏经验,但感觉它并不是最优雅的解决方案。

以上是关于将属性数据绑定到两个依赖属性中的任何一个的主要内容,如果未能解决你的问题,请参考以下文章

将字符串项绑定到 xaml 中字符串的依赖属性列表

将 CornerRadius 绑定到依赖属性

将 GeometryDrawing 画笔绑定到自定义控件依赖属性

WPF:将静态资源绑定到用户控件中的依赖项属性

UI绑定依赖属性的异步处理

XAML 绑定不适用于依赖属性?