WPF - 드로잉에 사용되지 않는 시각적 나무?
문제
OnRender 메소드가 호출 될 때 문제를 이해하고 있습니다.
내 예제를 고려하십시오.
나는 onRender 메소드를 무시하는 프레임 워크에서 파생 된 수업을 가지고 있습니다.
Grid grid
가 있다고 가정 해보십시오.내가 기대하는 것은
var someElement = new SomeElement();
grid.AddVisualChild(someElement);
someElement.InvalidateVisual();
.
는 someElement.onRender 메소드를 트리거하게됩니다.그것은 내 경우에도하지만 다음은 다음과 같습니다.
var someElement = new SomeElement();
grid.Children.Add(new SomeElement());
someElement.InvalidateVisual();
.
그래서 내 질문은 시각적 나무에만 추가 될 때 someElement
가 그려지지 않은 이유입니다.Children
속성에 추가하는 중요성은 무엇입니까?
그리고 더 일반적으로 맨더가 어떻게 호출됩니까?시각적 트리 또는 Children
속성을 통해 또는?
해결책
AddVisualChild는 당신이 생각할 수있는 일을하지 않습니다.
AddVisualChild는 VisualTree의 두 가지 비주얼 사이에 자식 부모 관계를 만들 수 있습니다. 더 많거나 적은 것은 없습니다. VisualTree는 내부에있는 모든 것을 렌더링하지 않습니다.
addLogicalChild는 LogicalTree를 만드는 것만으로도 마찬가지입니다. LogicalTree는 일반적으로 VisualTree보다 작고 짧습니다. 이는 더 빠릅니다.
자녀의 렌더링을 완전히 지원하려면 측정 방법을 호출하고 메소드를 준비해야합니다. Frathermore, 부모의 VisualChildRenCount 속성을 변경하고 각 자식에 올바른 크기를 전달하고 사용자가 볼 수 있도록 적절한 위치에 배치해야합니다. 그런 다음 상황이 렌더링됩니다.
AddVisualChild 혼자 호출 및 InvalidateVisual은 아무 것도하지 않습니다.
어린이 컬렉션은 위의 모든 것들이 자동으로 언급 한 모든 것들을위한 UIElementCollection입니다. 그래서 그것은 children.add (...)와 함께 일하고 있습니다.
Futhermore, 항상 자신의 것들을 쓰는 대신 항상 아이들 수집을 사용해야합니다.
Highcore 언급과 같이 많은 문제는 단순히 적절한 MVVM을 갖는 것만으로 해결할 수 있습니다.
사용자 정의 컨트롤을 가질 필요가 없습니다.