是否可以“强制”列表中的组合框项目出现在两列中?
例如像这样:
是否可以“强制”列表中的组合框项目出现在两列中?
例如像这样:
好吧,你可以,这是 XAML:
<ComboBox Name="ComboBox">
<ComboBox.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="2"/>
</ItemsPanelTemplate>
</ComboBox.ItemsPanel>
</ComboBox>
现在做一个简单的测试,将 0 到 8 的数字相加得到:
现在你可以随心所欲地设计它...... :)
当然,每个项目(在这种特殊情况下是每个数字)都是单独的、可点击的项目,这样就不会有误解。
[编辑] 我刚刚注意到您想以“相反的方式”进行操作,即在“行”的方向上,如果是这样,那么WrapPanel
正如其他答案中有人建议的那样,最好使用相反的方式。首先UniformGrid
在列方向上填充网格。
也许有一种方法可以做到这一点UniformGrid
,但是没有明显且简单的一键更改(我之前在这里错了:))
您可以将 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>
您需要将 aWrapPanel
放入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>
您可以尝试更改控制模板以使用 Grid 并使用转换器来决定 cbitems 是哪一列和哪一行。不过,我不确定您将如何处理所选项目。