2009-09-08 3 views
3

이미지 포스트 프로세싱을위한 간단한 WPF UI를 개발 중입니다.WPF - 캔버스에서 사용할 간단한 컨트롤 만들기

내가 드래그 WPF 컨트롤을 만들 싶습니다은 다음과 같이 대략 볼 것이다 캔버스에 사용되는 :

http://img32.imageshack.us/img32/884/photoeditor.png http://img32.imageshack.us/img32/884/photoeditor.png

모두 끝이 타원을 드래그 될 점과 선은 그들을 따를 것입니다 합류 종점이 이동하면

이제는 이러한 요소를 Canvas에 추가 한 다음 필요한 이벤트 처리를 구현하여 요소를 끌 때 이동되도록 구현하는 방법을 알고 있습니다. 하지만 다른 유형의 드래그 가능한 컨트롤을 추가하고 싶다면 유지하기가 어렵습니다.

내가하고 싶은 것은 FrameworkElement 또는 UIElement에서 파생 된 자체 클래스 (DragLine)로 모든 처리를 격리하는 것입니다. 이 드래그 가능한 UI 요소를 Canvas에 추가하려면 DragLine 인스턴스를 만들고 Canvas.Children에 추가하십시오. 나머지 프로그램은 DragLine 인스턴스 만 볼 수 있으며 새 요소를 그리는 데 사용되는 선이나 타원에 대해 걱정할 필요가 없습니다.

직접 모든 UI 요소를 직접 그려야하는 대신 Ellipse와 같은 표준 모양을 사용하여 선 종점을 구현하고 싶습니다. 이벤트 처리를 다시 사용하고 이미 구현 된 이러한 모양을 테스트해야하기 때문입니다.

질문 : FrameworkElement에서이 문제를 해결할 올바른 방법을 파생시키고 있습니까? 선과 끝점 타원은 내 새로운 수업에서의 시각적이며 논리적 인 자녀 일뿐입니다.

FrameworkElement에서 파생되는 것이 권장되는 방법이 아닌 경우 어떻게 대신이 작업을 수행할까요?

그렇다면 새로운 클래스가 캔버스에서만 사용되며 그리드 또는 스택 패널과 같은 것들에 대해서는 잘 작동하지 않아도되므로 구현을 단순화 할 수있는 방법이 있습니까?

+0

FrameworkElement에서 파생되는 것은 어떻게 처리 할 것인가입니다. WPF 세계에서 그다지 의미가 없습니다. –

+0

Measure/ArrangeOverrides를 구현하는 것은이 새로운 클래스가 Canvas에서만 사용된다는 점에서 superfluos와 같은 것처럼 보입니다. 이것들을 단순화하는 것에 대한 조언? 나는 이것들을 오버라이드하지 않으려 고 노력했는데 결과는 렌더링 된 시각적 인 아이들이 없다는 것이었다. – Nurpax

답변

4

아, 예, 프레임 워크에 이미 존재하는 것을 재발견하려합니다. 그것은 꽤 오랫동안 내 취미였습니다.

여기에서하는 일은 특별한 유형의 adorner을 만들려고합니다. 프레임 워크에 이미있는 비트를 사용하여 상대적으로 쉽게 수행 할 수 있습니다. I suggest you start here.

보려는 또 다른 사항은 Decorators입니다. 거의 똑같은 일을하지만 그들은 더 시각적이라고 생각합니다. 어느 것을 사용할지는 요구 사항에 따라 다릅니다.

+0

나는 장식자를 알고 있지만 내 목적에 맞게 꾸미는 방법을 정확히 모르겠습니다. 내 GUI에서 다른 요소를 장식하려하지 않고, 내가 쓰고있는 요소는 * 드래그하려는 요소이며 다른 요소에 연결되어 있지 않습니다. 한번 더 살펴 보겠습니다. 중요한 것을 놓친 것을 알고 놀라지 않을 것입니다. – Nurpax

+0

adorners + a < Line />과 같이 보입니다. – Will

+0

오, 이제 나는 그것에 대해 또 한번 생각해 보았습니다. 당신의 솔루션은 좋게 들립니다. 나는 그것을 줄 것이다. – Nurpax

관련 문제