2009-10-06 2 views
0

ItemsControl 내의 항목이 컨테이너를 오버플로 할 때 트리거를 사용하여 템플릿을 바꾸는 방법은 무엇입니까?ItemsControl이 ScrollViewer를 오버플로했는지 확인하는 방법은 무엇입니까?

내 현재 구현에서는 ItemsControl의 현재 상태에 따라 콘텐츠가 스크롤 막대의 가시성이 Auto로 설정된 경우 나타나는 ScrollViwer의 스크롤 막대를 야기하는지 여부에 따라보다 간단한 양식의 템플릿을 표시하고자합니다 . 그래서 ScrollViewer 또는 ScrollViewer 오버플로 여부에 대한 단서를 줄 수 ItemsControl 모든 속성에 관심이 있어요. 만약 내가 합리적인 불리언 값을 바인딩 할 수있는 몇 가지 사용자 지정 ValueConverter 사용해야합니다 내가 괜찮은 것 같아요.

+0

ScrollViewer와 ItemsControl의 ActualWidth 속성을 어떻게 든 비교할 수 있습니까? 그 골목을 먼저 내려 가서 내가 일할 수 있는지 알아봐야 겠어. – jpierson

+0

아마도 ExtentWidth 또는 ViewportWidth를 사용하거나이 둘을 비교하면 올바른 해결책이 될 수 있습니다. 지금 실험 중입니다. – jpierson

답변

1

좋아, 그래서 나 자신을 알아 냈어.

제 경우에는 논리적 스크롤을 물리적 스크롤과 반대 방향으로 사용하고 있습니다. 수평 레이아웃을 사용하기 때문에 ScrollViewer.ScrollableWidth에서 트리거해야합니다. 필자의 경우이 작업을 수행하는 비결은 ScrollViewer.HorizontalScrollBarVisibility를 Disabled로 설정하고 Hidden으로 설정했는지 확인하는 것이 었습니다. 그러면 스크롤 할 내용을 알 수 있으며 실제로 scrollableWidth 속성이 의미있는 값을 갖도록 만듭니다.

참고 : HorizontalScrollBarVisibility to Hidden을 흥미롭게 설정하면 시각적으로 스크롤 막대가 축소되어이 경우 Collapse와 Hidden 사이의 차이점을 명확히 알 수 없습니다.

+1

그래서이 방법에 문제가 있음을 발견했습니다. ScrollViewer의 ScrollableWidth 속성이 변경 될 때 ItemTemplate의 변경을 통해 ItemsControl의 내용을 수정하면 ScrollableWidth가 다시 변경되어 템플릿의 변경 내용을 수용하므로 끝없는 순환 바인딩 종속성이 시작됩니다. 이 해결 방법이있는 경우 내 솔루션 여전히 그렇지 않으면 나는 여전히 대안 솔루션을 찾고있는 것 같아요 유효합니다. – jpierson

관련 문제