문제

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을 갖는 것만으로 해결할 수 있습니다.

사용자 정의 컨트롤을 가질 필요가 없습니다.

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