2012-07-17 46 views
0

我试图使用WrapPanel和方向=“横向”时,拉伸ListBoxItems:水平定向-ListBoxItems不会拉伸

<ListBox HorizontalContentAlignment="Stretch" ItemsSource="{Binding SomeCollection}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border> 
       <!--Some Textboxes and Labels--> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 

如果我不使用WrapPanel将扩大到ListBoxItems匹配ListBox的大小。当我使用WrapPanel时,ListBoxItems具有最小宽度。

简述:

我有两个ListBoxItems列表水平定向:

A list with two Items

当我展开主窗口,列表框也将扩大,因为我的Horizo​​ntalAlignment =“拉伸”,但ListBoxItems不会。 enter image description here

所以,我想是像下面的例子中,列表框,扩大ListBoxItems:

The same list after I expanded the Window

难道还有比列表框对于这种情况其他更好的控制? 请让我知道,如果这不够清楚。 感谢您的帮助。

+0

我不能尝试了这一点,看看它是否是一个问题,但尝试添加IsItemsHost =“true”添加到WrapPanel 。 [MSDN文档](http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.isitemshost.aspx) – 2012-07-17 16:53:27

+0

@Wonko the Sane刚刚尝试过,似乎没有任何区别:( – Aris 2012-07-17 16:58:47

+0

也设置你的Horizo​​ntalAlignment =“Stretch”为WrapPanel? – 2012-07-17 17:09:34

回答

0

您应该能够使用UniformGridItemsPanel像这样:

<ListBox HorizontalContentAlignment="Stretch" ItemsSource="{Binding SomeCollection}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border> 
       <!--Some Textboxes and Labels--> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Rows="1" Columns="2" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
</ListBox> 
2

你不能使用水平包装面板,也期望元素水平拉伸,这是一个利益矛盾的矛盾。其实,如果你想任何类型拉伸WrapPanel可能不是正确的面板。

如果您希望它们在占用所有水平空间的同时占用相等的空间,则可以使用UniformGrid(将Rows设置为1)。

+0

是否有任何其他方式,我可以实现水平方向而不使用WrapPanel(或我也有StackPanel尝试),并拉伸ListBoxItems? – Aris 2012-07-17 17:59:30

+0

@Aris:所以你想要从左到右堆叠物品,你也想从左到右拉伸它们?这仍然是一个合乎逻辑的矛盾,它是不可能的,如果你水平放置它们,你必须有一些具体的宽度。 – 2012-07-17 20:07:59

+0

@Aris - 也许你想要完成的一个图像会对你有所帮助。 – 2012-07-17 20:24:50