2011-09-16 5 views
1

WPF 사용자 지정 컨트롤을 개발하여 무선 메쉬 네트워크의 노드 레이아웃과 연결을 표시해야합니다. 사용자는 노드를 드래그 할 수 있어야합니다. 요소가 사용 가능한 공간에서 떨어진다면 캔버스가 커지고 스크롤 막대가 필요합니다. 확대/축소 기능이 필요할 수 있습니다. 첫 번째로 취한 것은 ListBox에서 파생 된 CustomControl을 Canvas 기반 ItemsPanelTemplate과 함께 사용하는 것입니다. 조쉬 스미스 (Josh Smiths) DragCanvas를 사용하여 캔버스의 UIElements 자식을 드래그 할 수있게 해줌. 내 "노드"클래스는 현재 UIElement 파생되지 않습니다 (DragCanvas는 현재 내 노드를 래핑하는 ListBoxItems로 작업 중입니다).
1. 이것은 현명한 판단 방법입니까, 아니면 ListBox 아이디어를 무시하고 더 낮은 수준으로 진행해야합니까?
2. Inter 노드 링크 라인을 오버레이해야합니다. ControlTemplate의 일부인 UIElement 클래스와 같이 어떻게해야하는지 현재 알지 못합니다.
3. 몇 사람이 두통을 앓고있는 것 같습니다. 캔버스의 스크롤바 - 이것이 문제가 될까요?
일반 또는 특정 조언을 가장 높이 평가합니다. Basic target look of final controlWPF CustomControl 디자인 조언

답변

1

와우, 컨트롤로서 나쁘지 않습니다!

나는 비슷한 것을하고있다. 그러나 그렇게 간단하지는 않다.

1) IMHO, DragCanvas는 요소를 호스트하고 드래그하는 기본 방법입니다. 레이블 (노드), 호 및 레이블 (호의 무게)을 다시 호스트해야하므로 드래그 캔버스는 사용자 정의 컨트롤을 직접 작성하는 것보다 어렵다고 생각합니다.

템플릿으로는 모든 것이 쉽지 않습니다. 때로는 "이전"방식 인 winforms와 유사하거나 심지어 하이브리드 방식이 훨씬 좋습니다.

2) 언급 한대로 Canvas에서 파생 된 패널을 만들어 여러 개의 UIElements (레이블, 호 등)를 호스팅합니다. 모두 모델 + 뷰 모델에 의해 관리되어야합니다. 처음에는 조금 더 힘들지 만 앞으로는 많은 만족과 유연성을 제공 할 것입니다.

3) 캔버스가 두통을 줄 것이라고 생각하지 않습니다! 요소로 가득 찬 캔버스는 항상 크기가 0입니다. 이는 스크롤 뷰어를 추가하려는 사람들에게 두통을 안겨줍니다.

위의 Canvas 파생 클래스는 MeasureOverride 메서드를 재정 의하여 해당 크기가 호스트 된 개체에 맞도록합니다. 그러나 음의 좌표를 사용할 수 없다는 점이 약간 짜증납니다 (스크롤링 문제가 발생할 것입니다).

비슷한 "편집기"의 모든 작업을 몇 줄에 걸쳐 설명하기 란 어렵습니다. 그 일은 쉽지 않고 많은 것이 문제입니다.

어쨌든 도움이 되길 바랍니다.

건배

+0

안녕하세요 Mario - 의견을 보내 주셔서 감사합니다. 예, DragCanvas에 대한 의견에 동의합니다. 2)에서 귀하의 의견에서 나는 당신이 ListBox베이스를 abondone하고 캔버스에서 직접 customcontrol을 파생시킬 것이라는 의미로 읽을 수 있습니까? 한 손으로 ListControl 또는 ItemsControl을 선택 등을 위해 유용하다고 생각하지만, 다른 손으로 말하면 요소 (호와 호 무게) 사이의 상호 작용이있는 모델에는 꼭 들어 맞지 않습니다. – Ricibob

+0

ItemsControl이 고유 한 객체 집합 (예 : 노드)을 매핑하지만 자체 가중치를 사용하여 호를 매핑해야하는 문제 자체. 그들은 같은 컨트롤이 아니므로 두세 개의 ItemsControl을 함께 사용해야하며 사용자 정의 솔루션을 사용하는 대신 성가신 것으로 느낍니다. 저는 WPF와 그 접근법을 정말 좋아하지만 언젠가는 과잉입니다. –

+0

알았어요. 캔버스에서 직접 컨트롤을 파생시키고 객체 (노드 및 호/링크)를 스스로 관리하는 방법을 살펴 보겠습니다. 어떻게 보일지 그리고 다른 사람이 입력 사항을 볼 수 있는지 보겠습니다. 건배. – Ricibob