我想画一条线,当我双击它时,我想在上面放一个文字。我想把它放在内容控件中并绘制一条线,将折叠的文本框放在顶部,检测双击,显示文本框将其设置为文本块等。我遇到的唯一问题我不知道设置行的坐标是什么,因为它在contentcontrol中,因此绘制实际的行。我被困了几个小时,任何帮助都会受到赞赏。
基本上我需要一个具有起点和终点属性的对象,它具有一条线的形状,带有一个内容展示器。但我不知道如何去做。任何指针将不胜感激。
答案 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方法。