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