2009-09-03 4 views
7

나는 ScrollViewerItemsControl을 가지고 있습니다. ItemsControl의 항목은 기본적으로 Adorner으로 구성된 DataTemplate으로 확장됩니다.WPF Adorner Clipping

이제는 스크롤 할 때 의 시각적 어린이가 ScrollViewer 외부에 표시되는 것이 문제입니다. 가로 오프셋 0부터 100까지 스크롤 할 수 있다고 가정하면 Adorner의 시각적 하위 항목은 왼쪽으로 이동하고 숨겨야하지만 ScrollViewer 옆에 표시됩니다. ItemsControl 또는 ScrollViewerClipToBounds을 설정하면 작동하지 않습니다.

저는 Adorner이 무엇보다 z 순서대로 렌더링되었지만 ScrollViewer과 같은 경우에는 보이지 않아야한다는 것을 알고 있습니다. 도중에 보이는 Element 장식은 ScrollViewer을 통해 보이지 않습니다.

Adorner을 "클립"하는 쉬운 방법이있어 보이는 스크롤 영역에서만 볼 수 있습니까?

감사합니다, 안드레이 웨이 저우는 다음과 같은 스레드에서

+2

.NET/WPF의 어떤 버전이 당신에게 적합합니까? 나는이 행동을 재창조하려고 실제로 노력하고 있으며 나는 할 수 없다. 기본적으로 내 오류 adorners scrollviewer (팝업 사용하지 않고 경계를 표시 할) –

답변

2

에서 ScrollViewer 그래서 버튼의 Adorner가 제한되어 다시는-템플릿. 현재 셀 주위에 adorner을 그립니다 WPFToolkit 데이터 그리드를 서브 클래 싱 할 때

Implement selection highlighting - advice please

안부 데이비드

2

저도 같은 문제가 발생했습니다.

ScrollViewer의 내용은 ScrollContentPresenter 인스턴스에 의해 렌더링됩니다. ScrollContentPresenter에는 고유 한 adorner 레이어가 있으며이 레이어는 ScrollContentPresenter.AdornerLayer 속성을 통해 액세스 할 수 있습니다.

내가 그 레이어에 추가하면 내 adorner가 올바르게 클립하는 것을 발견했습니다.

+0

코드에서 ScrollContentPresenter를 어떻게 구합니까? – stone

+0

VisualTreeHelper를 사용하여 ScrollContentPresenter 유형의 자손을 찾을 때까지 시각적 트리를 검색합니다. 이 스레드의 메소드 (http://wpf.codeplex.com/Thread/View.aspx?ThreadId=34542)를 살펴보십시오. – hwiechers

5

포함 된 컨트롤의 ClipToBounds 설정이 충분하지 않습니다. adorner의 IsClipEnabled 속성도 설정해야합니다.

0

내 솔루션과 같이, 드로잉 컨텍스트에 클립 영역을 밀어 내가 필요로 어떤 렌더링, 그리고 마지막에 클리핑 팝업했다 :

drawingContext.PushClip(new RectangleGeometry(new Rect(0, 0, this.AdornedElement.RenderSize.Width, this.AdornedElement.RenderSize.Height))); 
// continue drawing 
drawingContext.Pop(); 

당신은 어떤 Adorner에이 플러그 수 있으며, 경계는 이미 요소의 일부로 사용할 수 있습니다.