2014-07-09 3 views
2

내 사용자 지정 WPF 컨트롤에서 InvalidateVisual을 호출하면 실제 레이아웃 평가 및 렌더링 프로세스는 언제 발생합니까?InvalidateVisual은 게으른 방식으로 작동합니까?

즉시 처리 - WinForms와 유사 - 처리를 마쳤습니까? InvalidateVisual에 대한

온라인 도움말 :

+0

InvalidateVisuals()는 Form.Invalidate()보다 훨씬 비쌉니다. 전체 재 레이아웃이 발생하기 때문입니다. 레이아웃없이 WPF 비주얼을 효율적으로 업데이트하려면 DrawingGroup "backingStore"를 만들고 OnRender() 중에 DrawingContext에 추가 한 다음 필요할 때마다 DrawingGroup을 업데이트하면 효율적으로 UI가 다시 칠됩니다. –

답변

3

온라인 도움말은 귀하의 질문에 대한 대답

이 방법은 내부적으로 InvalidateArrange를 호출합니다. InvalidateArrange에 대한

온라인 도움말 :

은 요소의 정렬 상태 (레이아웃)을 무효화합니다. 무효화 후 요소의 레이아웃이 업데이트되고 이됩니다.이 요소는 이후 UpdateLayout에 의해 강제 적용되지 않는 한 비동기 적으로이됩니다.

즉, InvalidateVisual은 즉시 적용되지 않습니다. 현재 코드가 완료 될 때까지 대기합니다 (전화가 UpdateLayout 인 경우 제외).

또한 Microsoft의 참조 소스 인 http://referencesource.microsoft.com/#q=UIElement.InvalidateArrange을 볼 수 있습니다. InvalidateArrange()은 차단 코드를 호출하지 않습니다. 즉시 반환됩니다.

관련 문제