连接器行与文本框,绑定问题

时间:2011-08-25 14:45:30

标签: wpf data-binding textbox line

我想画一条线,当我双击它时,我想在上面放一个文字。我想把它放在内容控件中并绘制一条线,将折叠的文本框放在顶部,检测双击,显示文本框将其设置为文本块等。我遇到的唯一问题我不知道设置行的坐标是什么,因为它在contentcontrol中,因此绘制实际的行。我被困了几个小时,任何帮助都会受到赞赏。

基本上我需要一个具有起点和终点属性的对象,它具有一条线的形状,带有一个内容展示器。但我不知道如何去做。任何指针将不胜感激。

1 个答案:

答案 0 :(得分:1)

我们也会为标记我们的连接做同样的事情。如果您通过路径绘制连接,则可以使用

LineGeometry.GetPointAtFractionLength(0.5, out midPoint, out tangetMidPoint);

这样你就可以在几何体上占据中心位置。现在,您可以将其存储到用于定位标签的依赖项属性中。当然,每次你的形状/几何形状改变它的位置或大小时都必须调用它。

组合此控件的小例子。

public class LabeledLine : ContentControl
{
    public static readonly DependencyProperty LabelPosition ...
    public static readonly DependencyProperty LineGeometry ...

    // call me everytime the LineGeometry gets changed.
    public void UpdatePath()
    {

        LineGeometry.GetPointAtFractionLength(0.5, out midPoint, out tangetMidPoint);
        LabelPosition = midPoint;
    }
}

您的ControlTemplate看起来像那样

<ControlTemplate TargetType="{x:Type local:LabeledLine}">
    <Canvas x:Name="canvas">
        <Path Data="{TemplateBinding LineGeometry}"/>
        <TextBox Canvas.Left="{TemplateBinding LabelPosition.X}" Canvas.Top="{TemplateBinding LabelPosition.Y}"/>
    </Canvas>
<ControlTemplate/>

现在要添加ContentControl功能,您可以添加ContentPresenter来代替TextBox。

  

基本上我需要一个具有起点和终点属性的对象   具有线条的形状

为此,只为您的2个位置添加2 dp属性。确保添加依赖项属性更改的处理程序以调用UpdatePath方法。