문제

두 개의 도형이나 개체를 선으로 연결하거나 붙이려고 합니다.이러한 모양은 동적으로 생성됩니다. 즉, 얼마나 많은 개체/모양을 만들어야 하는지 결정하기 위해 백엔드에서 웹 서비스를 호출한다는 의미입니다.이것이 결정되면 개체/모양을 함께 연결해야 합니다.

메서드 서명은 다음과 같습니다(Visio의 그리기 기능과 유사).

GlueTogether(objButton1, objButton2);

시작 선 지점이 어디에 있는지 확인하려면 각 직사각형 모양이나 버튼의 위치를 ​​가져와야 할 수도 있습니다.그런 다음 선을 그릴 두 번째 모양/객체 위치를 결정합니다.

어떤 도움이나 제안이라도 좋을 것입니다!

도움이 되었습니까?

해결책

  1. 쌓인 순서 또는 z 인덱스의 모양 아래에 있는 경로나 선을 사용하세요.
  2. 각 모양의 변환을 얻으려면 instance.TransformToVisual()을 사용하세요.
  3. 변환을 사용하여 각 모양의 중심점을 변환합니다.
  4. 두 중심점 사이에 선을 그립니다.

var transform1 = shape1.TransformToVisual(shape1.Parent as UIElement);
var transform2 = shape2.TransformToVisual(shape2.Parent as UIElement);

var lineGeometry = new LineGeometry()
{
  StartPoint = transform1.Transform(new Point(shape1.ActualWidth / 2, shape1.ActualHeight / 2.0)),
  EndPoint = transform2.Transform(new Point(shape2.ActualWidth / 2.0,    shape2.ActualHeight / 2.0))
};

var path = new Path()
{
Data = lineGeometry
};

다른 팁

나는 거의 똑같이 노력하고 있지만 선이 한 중심에서 다른 중심으로 가는 대신 두 모양의 가장자리에서 선이 멈추기를 원합니다.특히 선 끝에 화살표가 있는데 화살표는 모양의 중앙으로 내부/뒤로 이동하는 대신 모양의 경계에서 멈춰야 합니다.

내 모양은 그리드와 직사각형, 일부 레이블 및 기타 항목이 포함된 사용자 컨트롤입니다.모양 가장자리(둥근 직사각형)에 대한 기하학을 제공하는 방법을 찾을 수 없습니다.

경계 상자와 교차점을 사용하여 대략적인 가장자리에 있는 선으로 요소를 연결하는 솔루션을 찾았으며 화살표 끝 선을 사용하면 잘 작동합니다.

보다 앵커를 사용하지 않고 두 개의 WPF 캔버스 요소를 선으로 연결하시겠습니까?

이것 좀 봐: http://www.graphspe.com/Main.aspx#/Solution/graphviz-xaml-renderer

문자열로 printf하기만 하면 Silverlight[2|3] 다이어그램을 얻을 수 있습니다.

세이훈

게다가...개체의 중심점에 연결하는 대신 Michael S.의 동일한 코드를 수정했습니다.에게:

var lineGeometry = new LineGeometry()
{
    StartPoint = transform1.Transform(new Point(1 , b1.ActualHeight / 2.0)),
    EndPoint = transform2.Transform(new Point(b2.ActualWidth , b2.ActualHeight / 2.0))
};

이는 각 개체의 외부 부분에 연결됩니다.

나는 위의 코드를 사용하여 두 개의 버튼을 그립니다. 두 버튼 사이에 선을 원하지만 선이 없는 작은 원처럼 보이는 두 개의 버튼만 표시됩니다.

암호:

Button b1 = new Button();
Button b2 = new Button();
canvas1.Children.Add(b1);
canvas1.Children.Add(b2);
Canvas.SetLeft(b1, 300);

var transform1 = b1.TransformToVisual(b1.Parent as UIElement);
var transform2 = b2.TransformToVisual(b2.Parent as UIElement);

var lineGeometry = new LineGeometry()
{
    StartPoint = transform1.Transform(new Point(1, b1.ActualHeight / 2.0)),
    EndPoint = transform2.Transform(new Point(b2.ActualWidth, b2.ActualHeight / 2.0))
};

var path = new Path()
{
    Data = lineGeometry
};

canvas1.Children.Add(path);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top