2010-04-13 3 views
0

쓰기는 ... 그래서 난 WPF 내가 가계도를 표시 할 사용자 정의 컨트롤을 쓰고 싶었다 사용자 정의 컨트롤

그래서 그들의 통제 FrameworkElement에 상속하지만 모든 일이 매우 복잡해 .... FamilyShow에 보였다 .. 거기에 자녀와 함께 사용자 지정 FrameworkElement를 구현하는 방법을 보여주는 쉬운 자습서가 있습니까?

기본적으로이 무엇인지 내가 실패, 자식 컨트롤을 추가하고 그들에게 보여주고, 자식 컨트롤의 좌표 ...

답변

1

은 무엇 당신이 찾고있는 것은 Panel : 그것은 이미 유형 UIElementCollectionChildren 속성을 노출, 그래서 당신이해야 할 두 가지 방법으로 아이들을 추가하고 우선입니다 :이 원하는 크기를 계산

MeasureOverride 함수를 귀하의 패널. 원하는 크기로 돌려 줄 수 있습니다. 사용 가능한 모든 공간을 차지하기 위해, 단지 제약 조건을 반환 :

protected virtual Size MeasureOverride(Size availableSize) 
{ 
    return availableSize; 
} 

한 ArrangeOverride는 사각형 각 자녀의 위치를 ​​계산한다. 연결된 속성을 사용하여 각 자식에 대한 추가 데이터를 쉽게 저장할 수 있습니다. DockPanel.Dock 또는 Canvas.Top과 같이 공개적으로 볼 수있는 데이터이거나 모든 데이터가 이동하는 위치와 그 이유를 기억하는 데 사용하는 개인 데이터 일 수 있습니다. 한 ArrangeOverride의 골격은 다음과 같습니다

protected virtual Size ArrangeOverride(Size finalSize) 
{ 
    foreach(UIElement child in Children) 
    { 
    Rect childLocation = ... code to compute child location ... 
    child.Arrange(childLocation); 
    } 
    return finalSize; 
} 

선을 그릴 경우, 당신은 자식 컨트롤을 사용하거나 OnRender을 무시하고 DrawingContext에 직접 선을 그릴 수 있습니다. OnRenderArrangeOverride이 완료되고 항상 호출되어 자녀의 실제 위치에 액세스 할 수 있습니다.

자세한 자습서는 "WPF 패널 자습서"또는 "WPF 사용자 지정 패널 자습서"를 빙합니다. 여기에 one that looked good이 있습니다.

+0

고맙다 alot !! 내가 너에게 +5를 줄 수 있다면! – Peter

1

를 받고 그릴 때 나는 using a HierarchicalDataTemplate보고 권 해드립니다. 일반적으로 사용자 지정 컨트롤을 생성하는 대신 계층 적 데이터 템플릿을 사용하여 기본 제공 컨트롤을 사용하는 방법이 있습니다.

가계도를 보여주고 싶다면 표준 WPF 컨트롤에서 직접이 작업을 수행 할 수 있어야합니다.

+0

예 나무 컨트롤을 사용하여 보았습니다. 그러나 "부모"와 "자식"사이의 선을 가져올 수 없었습니다. 사용자 지정 컨트롤을 작성하는 방법을 배우는 것이 좋은 교훈이라고 생각합니다. – Peter

1

완전히 확장 된 TreeView 컨트롤을 사용하여 패밀리 트리를 표시 할 수 있습니다. 조쉬 스미스 (Josh Smith)는 자신의 필요에 맞게 수정할 수있는 패밀리 트리에 일반적으로 사용되는 레이아웃으로 레이아웃을 변경하는 방법에 대해 설명합니다. 사용자 정의 컨트롤을 개발하는 방법을 배우려면 먼저 더 쉽게 선택할 수있는 항목을 선택하십시오. 패밀리 트리 컨트롤보다 사용자 지정 컨트롤.

+0

음, 아프다. 쉬운 일을 골라 내라. 그러나 나는 아직도 그들의 크기와 placment를 얻고있는 나의 아이 요소를 두는 것에 관한 정보를 필요로 할 것이다. – Peter

관련 문제