2014-02-18 2 views
1

나는 계층화 된 내용의 ScrollViewer입니다. 예 :패널의 스크롤 소유자 지정

<ScrollViewer> 
    <Grid> 
     <Child x:Name="Layer1" /> 
     <Child x:Name="Layer2" /> 
     <Child x:Name="Layer3" /> 
    </Grid> 
</ScrollViewer> 

어린이는 서로 겹치지 않고 같은 크기 여야합니다. 자, 내 Child 클래스는 IScrollInfo을 구현합니다. 위의 표를 고려하십시오. 내가 하나의 자식을 ScrollViewer의 소유자로 선택하고 싶습니다. 따라서 "Layer1"은 스크롤 막대를 업데이트하고 다른 레이어는 스크롤 소유자와 동일한 크기를 갖도록합니다. 이런 식으로 뭔가 큰이었을 것입니다 :

<Grid ScrollViewer.ScrollOwner="Layer1"> 

물론, Grid 여기에 사용하는 잘못된 컨트롤입니다. WPF는 위와 같은 것을 지원합니까? 그렇지 않은 경우이 동작을 수행하는 가장 좋은 방법은 무엇입니까?

답변

0

특별히 우아하지 않습니다. 하나의 (약간 지루한) 옵션은 Grid을 서브 클래스 화하여 IScrollInfo을 구현하고 모든 해당 기능을 적절한 하위에 위임하는 것입니다. 사용자 정의 그리드의 속성을 통해 설정할 수 있습니다. 즉의 라인을 따라 : 그것이 ScrollViewer에 의해 사용되기 전에

public IScrollInfo Scroller { get; set; } 

bool IScrollInfo.CanHorizontallyScroll 
{ 
    get { return Scroller.CanHorizontallyScroll; } 
    set { Scroller.CanHorizontallyScroll = value; } 
} 

당신은 통증이있을 수있는,이 리디렉션 초기에 충분히 배치되는 것을보고해야합니다.

또 다른 옵션은 ScrollViewer에 자식 개체를 가리 키도록 ScrollInfo 보호 속성이 있다는 점입니다. ScrollViewer을 서브 클래스 화하고 이것을 설정해도 좋을지 모르겠다. 나는 방금 시도했지만, 설정해야 할시기는 분명하지 않다.

마지막으로, 형제 중 3 명은 다른 것보다 "특별하다"는 디자인 문제가 있다고 생각할 수 있습니다. 실제로는 IScrollInfo 동작을 정의하는이 하위 항목을 포함하는 사용자 지정 패널이 있어야합니다.

ScrollOwner이라는 용어는 이미 제어 스크롤 뷰어를 나타 내기 위해 IScrollInfo에 사용 된 개념입니다.

+0

이것은 'IScrollInfo'에 대해 밝혀주는 답변으로 충분합니다. 그러나 첫 번째 자식의 'ActualWidth'와 'ActualHeight'에 바인딩 된 다른 자식이있는 'ScrollViewer'의 * child *를 갖게되었습니다. – l33t

관련 문제