【问题标题】:Bind a Line position to the position of an element in a usercontrol将 Line 位置绑定到用户控件中元素的位置
【发布时间】:2010-10-30 23:17:09
【问题描述】:

我有一个包含特定用户控件的画布。

在某些时候,我想在画布上添加一条线(在代码中),其中一个点绑定到用户控件中元素的位置。用户控件是动态的,因此元素可以改变位置。

用户控件包含一个带有网格、堆栈面板等元素的布局。

对于用户控件,我会得到 Canvas.Left 和 Canvas.Top 属性, 但由于我不想绑定到用户控件而是绑定到它包含的元素, 我该怎么做? (在某种程度上,如果用户控件的布局发生变化,则会考虑元素的新位置)

【问题讨论】:

    标签: wpf user-controls element line bind


    【解决方案1】:

    让我们规定这里有 3 件事:

    “线”被绑定到 被收容的“孩子” “父母”。

    Line 应使用需要访问 Parent 的 ValueConverter 将其 Canvas.Top 和 Canvas.Left 设置为 Child 上的绑定。

    ValueConverter 将返回 Parent.Left + Child.GetPosition(Parent).Left

    (或任何确切的查找方法)。重要的是 Child 获取其相对于 Parent 的位置,并添加 Parent 的位置。

    (详细发表评论) 所以你可以这样指定一行:

    <Line X1="50" Y1="50" X2="200" Y2="200" />
    

    这意味着您将绑定应用于每个坐标说明符。最好的办法可能是将 X 或 Y 作为 ConverterParameter 传递给 ValueConverter,以节省您编写过多的重复代码。

    您的原始问题指定您正在寻找 X1,Y1。我不知道你想要线路的另一端是什么,听起来它好像固定在某个地方。或者,如果它要去另一个元素,你在那里做基本相同的技巧 - 这只会在一个点上起作用。让我们暂时假设您总是希望另一个点为 100,100。

    所以你的行是这样指定的:

    <Line X1="{Binding ElementName=yourTarget, ConverterParameter=X, Converter={StaticResource targetLocationExtractor}}" Y1="{Binding ElementName=yourTarget, ConverterParameter=Y, Converter={StaticResource targetLocationExtractor}}" X2="200" Y2="200" />
    

    【讨论】:

    • 感谢您的回复。 WPF Line 具有应绑定的 X1,Y1-X2,Y2 点。您能否详细说明我将如何做到这一点?
    • 干杯,我已经能够使用转换器解决这个问题了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多