是否可以“强制”列表中的组合框项目出现在两列中?
例如:
答案 0 :(得分:6)
嗯,你可以,这是XAML:
<ComboBox Name="ComboBox">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2"/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
现在进行简单测试,添加0到8之间的数字给出:
现在你可以随心所欲地设计它......:)
当然,每个项目(每个数字,在这种特殊情况下)都是单独的,可点击的项目,只是没有误解。
[编辑]我刚刚注意到你想要以相反的方式做到这一点,那就是'行'方向,如果是这样,那么也许最好使用WrapPanel
代替,正如有人建议的那样另一个答案。 UniformGrid
首先按列方向填充网格。
也许有一种方法可以使用UniformGrid
,但是没有明显的简单的一键更改(之前我错了:))
答案 1 :(得分:5)
您可以将ItemsPanel更改为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="Value 1" />
<ComboBoxItem Content="Value 2" />
<ComboBoxItem Content="Value 3" />
<ComboBoxItem Content="Value 4" />
<ComboBoxItem Content="Value 5" />
</ComboBox>
答案 2 :(得分:2)
您需要将WrapPanel
放入组合框的ItemsPanel
。
<ComboBox>
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" Height="100" />
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
<ComboBoxItem Content="Value 1" />
<ComboBoxItem Content="Value 2" />
<ComboBoxItem Content="Value 3" />
<ComboBoxItem Content="Value 4" />
<ComboBoxItem Content="Value 5" />
<ComboBoxItem Content="Value 6" />
<ComboBoxItem Content="Value 7" />
<ComboBoxItem Content="Value 8" />
<ComboBoxItem Content="Value 9" />
<ComboBoxItem Content="Value 10" />
<ComboBoxItem Content="Value 11" />
<ComboBoxItem Content="Value 12" />
<ComboBoxItem Content="Value 13" />
<ComboBoxItem Content="Value 14" />
<ComboBoxItem Content="Value 15" />
</ComboBox>
答案 3 :(得分:0)
您可以尝试更改控件模板以使用Grid并使用转换器来确定cbitems的列和行。我不知道你如何处理所选项目。