2012-04-16 2 views
2

wpf/xaml에서 가로형 이미지 목록을 표시하는 컨트롤을 만들려고합니다. 고정되는리스트 박스의 폭 (스크롤 바 없음). 새 항목이 추가되면 기존 항목은 표시 할 이미지의 양을 줄여 실제 이미지가 표시된 이미지의 양을 줄이지 않습니다. 기능은 상대 너비 등록 정보 ("*")가있는 격자에 새 열을 추가하는 것과 유사하며 열에는 고정 너비가있는 이미지가 포함됩니다. 여기까지 내 코드는 다음과 같습니다.ListBox 가로 이미지 표시 WPF

<Window.Resources> 
    <ItemsPanelTemplate x:Key="ListBox_HorizontalItems"> 
     <StackPanel Orientation="Horizontal" /> 
    </ItemsPanelTemplate> 

    <DataTemplate x:Key="ListBox_DataTemplate"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="50" /> 
      </Grid.ColumnDefinitions> 
      <Image Width="150" Source="{Binding ImageSource}" /> 
     </Grid> 
    </DataTemplate> 

    <Style x:Key="ListBox_Style_Horizontal" TargetType="ListBox"> 
     <Setter Property="Width" Value="150" />--> 
     <Setter Property="ItemTemplate" Value="{StaticResource ListBox_DataTemplate}" /> 
     <Setter Property="ItemsPanel" Value="{StaticResource ListBox_HorizontalItems}" /> 
    </Style> 
</Window.Resources> 

<Grid> 
    <ListBox Name="lbxImages" Style="{StaticResource ListBox_Style_Horizontal}" Width="250" Height="100" /> 
</Grid> 

내가 원하는 것에 매우 가깝습니다! 그러나 새 항목이 목록에 추가 될 때 표시되는 이미지의 양을 줄이는 방법을 찾지 못합니다. 현재 새 항목이 추가되면 스크롤바가 나타납니다. 넣다 여기 아주 잘 나 자신을 설명하고 있지 않다 스크린 샷은 내가 필요로하는 기능을 보여주고있다 :

3 Items 4 Items 5 Items

이 사람이 어떻게 이것을 달성하는 나를 보여줄 수 있습니까? 어떤 도움을 주셔서 감사합니다!

답변

9

가 ItemsPanel로 다음 UniformGrid를 사용

<ItemsPanelTemplate> 
    <UniformGrid Columns="{Binding Path=Items.Count,RelativeSource={RelativeSource AncestorType={x:Type ListBox}}}"/> 
</ItemsPanelTemplate> 

안 수평 스크롤 :

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 

수정 ItemTemplate을이에 대한

<DataTemplate> 
    <Image Source="{Binding ImageSource}" 
      Stretch="None" 
      HorizontalAlignment="Center"/> 
</DataTemplate> 
+0

감사합니다, 그것은 잘 작동합니다! 나는 전에 "UniformGrid"를 사용한 적이 없으며, 꽤 유용하게 보입니다 ... – qu1ckdry