2011-07-05 59 views
0

所以我有一个列表框,它显示了一行之前移动到下一行的3个图像,这是我用来做它的代码。WPF列表框,多个行和列顶部对齐问题

<ListBox Name="lbListOfItemsOnHDD" Grid.Row="1" Grid.Column="0" Width="600" Height="450" Margin="5" BorderThickness="0" ScrollViewer.HorizontalScrollBarVisibility="Hidden" HorizontalAlignment="Left" VerticalAlignment="Top"> 
        <ListBox.ItemsPanel> 
         <ItemsPanelTemplate> 
          <WrapPanel IsItemsHost="True" Orientation="Horizontal" Width="600" VerticalAlignment="Top" /> 
         </ItemsPanelTemplate> 
        </ListBox.ItemsPanel> 
        <ListBox.ContextMenu> 
         <ContextMenu Name="cmLibraryImages" x:Uid="cmLibraryImages"> 
          <MenuItem 
           Name="cmCmdDelete" 
           Header="Delete Selected Image" 
           Click="cmCmdDelete_Click" /> 
         </ContextMenu> 
        </ListBox.ContextMenu> 
       </ListBox> 

图像宽度总是相同的,所以这总是移动下一行之前显示3张图像,唯一的问题是我想的图像下方的图像标题,这会导致与的顶部对准的问题图片不是水平(见下面的截图)。在运行时使用简单的for循环添加图像,以通过包含图像路径,图像标题等的列表......图像和文本框被添加到堆叠面板,然后它自己添加到列表框。

Unaligned at the top images in WPF list box

我已经使用上的各个不同部分的VALIGN顶部和改变利润率尝试,但都没有成功地在顶部对齐。

任何帮助,将不胜感激。

回答

2

这样做更灵活一点的方法是设置ListBox的ItemTemplate并使用Binding来完成。 例如:

在代码隐藏

(或更好的视图模型,如果你遵循MVVM)创建一个类或结构类似:

public struct Movie 
{ 
    String Title; 
    Uri Source; 
} 

和的ObservableCollection这样:

public ObservableCollection<Movie> Movies 
{ 
    get; 
    set; 
} 

并且您将Movies集合设置为ListBox的ItemsSource(在代码隐藏或绑定中)

并最终将XAML

<ListBox.ItemTemplate> 
    <DataTemplate DataType="{x:Type typeOfTheAddedItem}"> 
    <StackPanel Height="500" Orientation="Vertical"> 
     <Image Source="{Binding Path=PathRelativeTotypeOfTheAddedItem}" /> 
     <TextBlock="{Binding Path=PathRelativeTotypeOfTheAddedItem}" /> 
    </StackPanel> 
    </DataTemplate> 
</ListBox.ItemTemplate>