2011-08-25 22 views
0

我想绘制一条线,当我双击它时,我想在其上放置文本。我正在考虑将它放在内容控件中并绘制一条线,将顶部的折叠文本框放在上面,检测到双击,显示文本框将其设置为文本块等。我碰到的唯一问题是我不知道该怎么做设置线的坐标,因为它位于contentcontrol内部,所以绘制了一条实际的线。我一直坚持几个小时,任何帮助将不胜感激。带有文本框的连接器行,绑定问题

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

回答

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 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。

基本上我需要与 具有线

对于形状只是添加2个DP属性为您的2个位置的开始和结束点属性的对象。确保添加一个依赖属性更改处理程序来调用UpdatePath方法。

+0

好的,谢谢我会给它一个镜头。 – mihajlv