2012-04-16 113 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

使用以下UniformGrid作爲ItemsPanel:

<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 2012-04-16 11:30:19