我想绘制一条线,当我双击它时,我想在其上放置文本。我正在考虑将它放在内容控件中并绘制一条线,将顶部的折叠文本框放在上面,检测到双击,显示文本框将其设置为文本块等。我碰到的唯一问题是我不知道该怎么做设置线的坐标,因为它位于contentcontrol内部,所以绘制了一条实际的线。我一直坚持几个小时,任何帮助将不胜感激。带有文本框的连接器行,绑定问题
基本上我需要一个具有开始和结束点属性的对象,它具有线条形状,并带有内容展示器。但我不知道如何去做这件事。任何指针将不胜感激。
我想绘制一条线,当我双击它时,我想在其上放置文本。我正在考虑将它放在内容控件中并绘制一条线,将顶部的折叠文本框放在上面,检测到双击,显示文本框将其设置为文本块等。我碰到的唯一问题是我不知道该怎么做设置线的坐标,因为它位于contentcontrol内部,所以绘制了一条实际的线。我一直坚持几个小时,任何帮助将不胜感激。带有文本框的连接器行,绑定问题
基本上我需要一个具有开始和结束点属性的对象,它具有线条形状,并带有内容展示器。但我不知道如何去做这件事。任何指针将不胜感激。
我们对标记连接的做法也是如此。如果你通过一条路径绘制连接,你可以使用
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方法。
好的,谢谢我会给它一个镜头。 – mihajlv