우리는 우리의 연결을 라벨링하기 위해 동일한 작업을 수행합니다. 사용할 수있는 경로를 통해 연결을 그릴 경우
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은 이제 텍스트 상자 대신에 ContentPresenter에 추가 할 수있는 ContentControl
기능을 추가하는
<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/>
처럼 보일 것입니다.
는 기본적으로 나는 그냥 2 개 위치에 대한 2 개 DP 속성을 추가 것을 들어 줄
의 모양을 가지고 시작 및 종료 지점 특성을 가진 개체가 필요합니다. 종속성 속성 변경 처리기를 추가하여 UpdatePath 메서드를 호출해야합니다.
괜찮아요, 고맙습니다. – mihajlv