우리는 세부 사항을 표시하기 위해 많은 렌더링을 수행하는 매우 큰 하위 컨트롤을 가지고 있지만 컨트롤의 일부만 실제로 표시됩니다 (계층의 위쪽에있는 항목에 의해 클리핑됩니다. OnRender 호출 중에 보이는 부분을 렌더링합니다.렌더링의 최적화를 위해 컨트롤의 가시 범위를 쉽게 결정할 수 있습니까?
다음 그림을 고려하십시오. 자식은 100x50이지만 보이는 영역은 자식 좌표의 (10,5) 및 (100,50)에 모서리가있는 사각형입니다. 그것이 우리가 찾고있는 영역입니다.
참고 : 단순히 클리핑을하고있어 부모가 될 않을 수 있기 때문에 클리핑을위한 부모와 시험에 아이의 전환을 조정 할 수 없습니다.
ScrollViewer 내부에 중첩 된 캔버스 컨트롤을 고려하십시오. 내부 캔버스는 외부 캔버스의 경계 내에 완전히 배치 될 수 있지만 외부 캔버스는 ScrollViewer에 의해 잘릴 수 있으므로 내부 캔버스가 시각적으로 잘립니다.
시각적 트리를 걷고 각 부모를 테스트하면 성능이 저하됩니다.
컨트롤의 보이는 영역의 경계를 가져올 수있는 WPF가 내장되어 있습니다.
이 스레드가 도움이 될 수 있습니다 당신은 당신이 원하는 것을 얻을 : http://stackoverflow.com/questions/1517743/in-wpf-how-can-i-determine-whether-a-control-is-visible -to-the-user –
아니요! 그건 그냥 경계 검사 (위의 '참고'참조)입니다. 실제로 보이는 것을 나타내지는 않습니다. – MarqueIV
어둠 속의 한 찌르기 - 반사판을 사용하여 IsMouseDirectlyOver 속성 (대부분의 WPF 컨트롤에 있음, FrameworkElement에서 상속)의 내부를 조사합니다. 이 속성은 중첩 된 객체를 통해 마우스가 정확한 특정 컨트롤 위에 직접 있는지 여부를 확인합니다. 나는 당신이 경계 검사를 위해 비슷한 논리를 사용할 수있을 것이라고 생각하고있다 ... – Marko