문제

노드와 유사한 두 개의 사용자 지정 컨트롤과 노드 간에 링크를 그리는 컨트롤이 있습니다.

가능한 한 xaml로 두 컨트롤을 모두 작성하고 싶습니다.링크는 두 노드를 종속성 속성으로 저장하며, 노드가 이동할 때마다 데이터 바인딩을 사용하여 노드 사이의 선을 이동합니다.

두 노드 사이의 거리에 따라 선의 다른 값(예: 획 너비)을 변경할 수 있으면 좋을 것입니다.따라서 두 노드 중 하나가 이동할 때 속성을 업데이트해야 하는데 이것이 어떻게 작동하는지 잘 모르겠습니다.

누구든지 아이디어가 있나요?

도움이 되었습니까?

해결책

다음과 같이 시도해 볼 수 있습니다.

  1. 이전 게시물에서와 같이 링크 클래스에서 너비, 획(필요한 모든 것) 속성을 정의합니다.
  2. 해당 속성에 적용되는 멀티 핀딩을 정의하여 두 노드를 바인딩에 전달하십시오.

<멀티바인딩 변환기="{StaticResource 변환기}">
<바인딩 경로="Node1" RelativeSource|소스.../>
<바인딩 경로="Node2" .../>
</멀티바인딩>

  1. 기본적으로 노드 사이의 거리에 따라 스트로크가 어떻게 보이는지 계산하는 인터페이스 IMultiValueConverter를 구현합니다.

  2. xaml에서 변환기의 인스턴스를 생성하고 이를 멀티바인딩의 Converter 속성에 추가합니다.

이 솔루션의 장점은 매우 명확한 클래스 모델이 있고 각 클래스가 간단한 작업을 수행한다는 것입니다.또한 나중에 단순하게 유지되고 단순히 노드 표시용으로 설계된 노드 클래스를 건드리지 않고도 추가 사례를 지원하도록 변환기 클래스를 구성할 수 있습니다.

일반적으로 여러 속성 값을 다른 속성 하나에 매핑해야 할 때마다 다중 바인딩 및 변환기를 사용해야 합니다.

다른 팁

노드가 이동할 때마다 계산되는 StrokeWidth 속성을 링크 클래스에 정의한 다음 적절한 스타일 속성을 여기에 바인딩할 수 있습니다.

DataTrigger를 사용하여 작업을 시도할 수도 있지만 작업하려면 특정 값이 필요합니다. 어떤 종류의 표현식도 사용할 수 없습니다.이로 인해 솔루션을 노드 사이의 다양한 거리에 맞게 확장하는 것이 어려워집니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top