【问题标题】:Connector Lines with textbox, binding issue带有文本框的连接线,绑定问题
【发布时间】:2011-08-30 09:00:53
【问题描述】:

我想画一条线,当我双击它时,我想在上面放一个文本。我正在考虑将它放在内容控件中并画一条线,将折叠的文本框放在顶部,检测双击,显示文本框将其设置为文本块等。我遇到的唯一问题我不知道该怎么做设置线条的坐标,因为它在内容控件内,因此绘制了一条实际的线条。我已经被困了几个小时,任何帮助将不胜感激。

基本上,我需要一个具有起点和终点属性的对象,该对象具有线的形状,并带有内容呈现器。但我不知道该怎么做。任何指针将不胜感激。

【问题讨论】:

    标签: wpf data-binding textbox line


    【解决方案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 方法。

    【讨论】:

      猜你喜欢
      • 2010-12-20
      • 1970-01-01
      • 2023-04-06
      • 2012-12-16
      • 2011-06-03
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多