2011-07-05 76 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>