2015-02-09 93 views
0

我有我的列表框在WPF中的问题。首先,我有一个带自定义ItemTemplate的水平ListBox。现在,我想拉伸项目,以便项目适合ListBox的完整宽度。我尝试了将HorizontalContentAlignment设置为Stretch,但这仍然不起作用。水平列表框项目拉伸

这里是我的的ItemTemplate

<DataTemplate x:Key="ListViewStepTemplate"> 
    <Grid VerticalAlignment="Stretch"> 
     <TextBlock Text="{Binding Path=Title}" 
        FontSize="15" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" /> 

     <Image Height="16" 
       Width="16" 
       HorizontalAlignment="Right" 
       VerticalAlignment="Bottom" 
       Source="/images/Content/check_16x16.png" 
       Visibility="{Binding Path=IsDone, Converter={StaticResource BooleantoVisibilityConverter}, UpdateSourceTrigger=PropertyChanged}" /> 
    </Grid> 
</DataTemplate> 


这是我列表框

<ListBox DockPanel.Dock="Top" 
     ItemsSource="{Binding AllItemsList}" 
     SelectedItem="{Binding CurrentItem}" 
     ItemTemplate="{StaticResource ListViewStepTemplate}" 
     Height="60" 
     HorizontalContentAlignment="Stretch"> 

    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <StackPanel Orientation="Horizontal" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 

    <ListBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ListBoxItem}"> 
      <Setter Property="IsEnabled" Value="{Binding IsEnabled, UpdateSourceTrigger=PropertyChanged}" /> 
      <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
      <Setter Property="Padding" Value="30 0" /> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 

如果有4个项目,每个项目应该有25%的宽度。如果有5个项目,则每个项目的宽度应为20%,依此类推。

是否可以做我想做的事情?我现在尝试了很多东西,但它永远不会工作。

回答

2

而不是使用StackPanel使用UniformGrid

提供了一个方式来安排在网格中的内容,其中网格中的所有单元格的大小相同。

并将列数绑定到列表中的项数和禁用水平滚动功能。

<ListBox 
    ... 
    ItemsSource="{Binding AllItemsList}" 
    ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
    ScrollViewer.VerticalScrollBarVisibility="Disabled" > 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
     <UniformGrid Rows="1" Columns="{Binding AllItemsList.Count}"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemContainerStyle> 
     <Style TargetType="{x:Type ListBoxItem}"> 
     <!-- style --> 
     </Style> 
    </ListBox.ItemContainerStyle> 
</ListBox> 
+1

感谢您的回答。它的工作原理是我想要的。 – 2015-02-09 13:23:26

1

请勿使用StackPanel,请改为使用UniformGrid

<ItemsPanelTemplate> 
    <UniformGrid Rows="1" Columns="{Binding DataContext.Count, RelativeSource={RelativeSource Self}}"/> 
</ItemsPanelTemplate>