2015-01-06 1 views
1

최소화 가능한 컨트롤이있는 응용 프로그램이 있습니다. 최소화 된 항목은 수평 스택 패널에 표시됩니다. 응용 프로그램 항목의 크기를 줄이면 (축소) 공간이 너무 작아서 잘릴 수 있습니다.
이 내 아이디어가 확장 컨트롤 (like this)WPF - 잘게 잘린 요소에 대한 확장 가능한 컨트롤이있는 패널

응용 프로그램은 MVVM 패턴을 다음에 다진 요소를 이동하는 것이었다 방지하려면 패널의 항목 뷰 모델에 바인딩 ItemsControl에에 있습니다.

내 구현은 사용자 정의 패널을 사용하여 잘린 요소가 "SpillOverElements"속성으로 전달됩니다. 다른 컨트롤 (패널, 확장기 또는 팝업)을이 속성에 바인딩하려고합니다. 문제는 ItemsControl 내부의 "SpillOverPanel"속성의 "SpillOverElements"속성에 바인딩 할 수 없다는 것입니다.

그래서 "SpillOverPanel"의 "SpillOverElements"속성에 어떻게 바인딩 할 수 있습니까? 이것을 구현하는 다른 방법들도 환영합니다. 내 방식이 올바른 접근인지 확실하지 않습니다.

미리 도움 주셔서 감사합니다.

+0

왜'StackPanel'을 버리지 않고 사용자가 숨겨진 컨트롤로 스크롤 할 수있게 해주는'ScrollBar'를 표시하는'Grid'를 사용해야합니까? – Sheridan

+0

비트 해키하지만 SpillOverElements 속성을 (RelativeSource를 통해) ItemsControl.Tag 속성에 바인딩 할 수 있습니다. 그렇다면 StackPanel을 바인딩 할 수 있습니다. – GazTheDestroyer

답변

0

나를 용서해주십시오. 아래 텍스트에는 많은 spitballing이 있습니다.

단일, 재사용 ItemsControl에 클래스는

이것은 아마도 다소 복잡 구현 될 것입니다. Spillover 컨트롤에 표시된 항목에 대해 항목 컨테이너 역할을하는 "SpilloverItemsControl"클래스와 "SpilloverItem"클래스의 형태로 완전히 새로운 WPF 컨트롤을 만들어야 할 가능성이 높습니다. 물론 SpilloverItemsControl 클래스는 ItemsControl에서 상속받습니다.

SpilloverItem 컨테이너는 부모 컨트롤이 다양한 크기 및 가시성 계산에 따라 true 또는 false으로 자동으로 설정할 속성 (예 : IsSpilledOver)을 노출합니다.

SpilloverItemsControl 클래스는 ControlTemplate 내에 두 개의 다른 ItemsControl을 제공하는 일종의 복합 컨트롤로 레이아웃됩니다. "IsSpilledOver"를 'false'로 설정하면 항목의 가시성이 Visible로 설정되고 ' 축소 된 경우 '; 또 하나는 'Spillover'영역으로 사용되며 "IsSpilledOver"가 true로 설정된 항목 만 표시합니다.

다른 접근

다른 방법,하지만 약간 덜 재사용이 true로 설정해야 할 때 결정하기 위해 "IsSpilledOver"속성이 당신의 품목의 ViewModel에 존재하고, 최소한의 Behavior를 만드는 것입니다 또는 거짓. 그런 다음보기에서 동일한 컬렉션에 바인딩 된 두 개의 서로 다른 ItemsControl을 다시 갖게됩니다. 하나는 '비 유출'항목을 표시하고 다른 하나는 '유출 된 품목'을 ​​표시합니다. 여기 가시성은 ItemTemplate에서 설정됩니다.