2009-08-18 74 views
47

我想写一个WPF应用程序来显示选择的图像。 我想在窗口顶部的横幅中显示所有可用图像,并在主窗口中显示主要选定图像以供进一步处理。WPF列表框,水平布局它的项目

如果我想要在窗口的列表垂直显示图像,我可以使用数据绑定非常优雅地做到这一点。

<ListBox 
     Name="m_listBox" 
     IsSynchronizedWithCurrentItem="True" 
     ItemsSource="{Binding}"    
     > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Image Source="{Binding}" Width="60" Stretch="Uniform" /> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

有没有一种简单的方法可以让水平而不是垂直? 一个解决方案的主要要求是:

  • 的项目,采用数据绑定
  • 选择的项目是由用户点击它简单地改变填充。
+0

为什么不列表视图? – adatapost 2009-08-18 08:25:14

回答

101

WrapPanel

<ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel IsItemsHost="True" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBoxItem>listbox item 1</ListBoxItem> 
    <ListBoxItem>listbox item 2</ListBoxItem> 
    <ListBoxItem>listbox item 3</ListBoxItem> 
    <ListBoxItem>listbox item 4</ListBoxItem> 
    <ListBoxItem>listbox item 5</ListBoxItem> 
</ListBox> 

WPF Tutorial

+37

或StackPanel的方向=“水平” – Nir 2009-08-18 11:47:00

+2

StackPanel会是更好的解决方案,因为Nir说。 – 2009-08-18 13:44:07

+1

谢谢!是的,水平方向的stackPanel是更好的选择。 – adatapost 2009-08-18 14:30:49

10

ListBox控件的默认ItemsPanelVirtualizingStackPanel,所以如果你想为控制正常,默认的经验,但只是把它水平放置,你应该指定这个(并改变方向)。

例子:

<ListBox> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <VirtualizingStackPanel IsItemsHost="True" Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox>