Silverlight/Tips

Tip : ListBox의 사이즈를 자동으로 따라가는 WrapPanel

길버트리 2009. 5. 25. 12:33

안녕하세요. 국가적으로 슬픈 일이 있는 요즘 날씨는 왜 이리도 화창한지...
그래도 좋은 날씨 덕분에 덜 우울할 수 있는 것 같습니다.

실버라이트 개발자 여러분 ListBox에 Item들을 2차원적으로 배열할 필요가 있을 때에는
ItemsPanel로 WrapPanel을 많이 쓰실 거예요.

WrapPanel은 실버라이트 툴킷의 Microsoft.Windows.Control.dll를  참조 추가하시면 사용하실 수 있구요.
실버라이트 툴킷은 여기서 최신버전을 얻으실 수 있습니다.

WrapPanel 다 좋은데 효험을 보기 위해서는 보통 Width를 고정을 하고 쓰실 겁니다.
근데 UI가 어디 그렇습니까? ListBox는 여러군데 다양한 사이즈로 쓰이고 내부의 WrapPanel은 사이즈를 고정해 줘야하고...
그러다 보면 ItemPanelTemplate을 사이즈 별로 만들게 되는 경우도 있겠죠. 물론 안좋은 케이스입니다.

App.xaml (안좋은 예)

        <ItemsPanelTemplate x:Key="WrapPanelStyle580">
            <controls:WrapPanel Width="580"/>
        </ItemsPanelTemplate>  
        <ItemsPanelTemplate x:Key="WrapPanelStyle840">
            <controls:WrapPanel Width="840"/>
        </ItemsPanelTemplate>  
저 Width 프로퍼티를 ListBox의 프로퍼티로 TemplateBinding을 해보려는 시도도 해보았지만, 안 되더군요.



// 2009년 5월 26일이 되자 제대로 된 방법을 찾았습니다.

App.xaml (젤 좋은 예)
<ItemsPanelTemplate x:Key="WrapPanelStyle">
            <controls:WrapPanel />
        </ItemsPanelTemplate>  


그냥 WrapPanel 쓰구요.



<LISTBOX ItemsPanel="{StaticResource WrapPanelStyle}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" />


ScrollViewer.HorizontalScrollBarVisibility 이것만 Disabled로 설정하는 것만으로 해결...