我们对连接进行标记也是如此。如果您通过路径绘制连接,则可以使用
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 方法。