我希望我的ComboBox
在多列中显示ComboBoxItem
,如下所示:
有人可以告诉我该怎么做?
我可以用这个:
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="3"/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
但它不允许我指定我想要结束列的位置。
有没有办法让ComboBox
使用Grid.Column
中的ComboBoxItem
属性,以便我可以在不同的列中添加ComboBoxItem
?
答案 0 :(得分:1)
将ItemsPanelTemplate更改为WrapPanel。
<ComboBox>
<ComboBox.Resources>
<Style TargetType="ComboBox">
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<WrapPanel IsItemsHost="True" Orientation="Vertical" Width="100" Height="50" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="ComboBoxItem">
<Setter Property="Width" Value="50" />
</Style>
</ComboBox.Resources>
<ComboBoxItem Content="Item 1" />
<ComboBoxItem Content="Item 2" />
<ComboBoxItem Content="Item 3" />
<ComboBoxItem Content="Item 4" />
<ComboBoxItem Content="Item 5" />
<ComboBoxItem Content="Item 5" />
</ComboBox>
答案 1 :(得分:0)
您需要向项目添加自定义Panel
,并将其设置为ItemsPanel
,如下所示:
<ComboBox>
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<Controls:ColumnPanel />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
您可以了解如何在this tutorial中创建自定义Panel
。
编辑&gt;&gt;&gt;
我只是觉得你可以从现有的Panel
获得这个简单的布局:WrapPanel
...在我研究这个时给我一点时间。
进一步编辑&gt;&gt;&gt;
好的,WrapPanel
上有这些属性; ItemWidth
和ItemHeight
。这有点像黑客,但是如果你将ItemWidth
的{{1}}属性设置为WrapPanel
的{{1}}的一半,那么你将拥有一个基本的两列Width
。唯一的问题是你必须对这些值进行硬编码。
就个人而言,我建议您花点时间创建一个简单的可重用WrapPanel
控件,该控件允许您设置所需的列数。我有一个并且已经找到它的许多用途......它们也可以进入Panel
和其他集合控件。