C#WPF Combobox下拉列表到多列

时间:2013-02-04 13:07:03

标签: c# wpf list combobox multiple-columns

是否可以“强制”列表中的组合框项目出现在两列中?

例如:

CB选择项目

CB项目1 | CB项目4

CB项目2 | CB项目5

CB项目3 |

4 个答案:

答案 0 :(得分:6)

嗯,你可以,这是XAML:

<ComboBox Name="ComboBox">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="2"/>
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
</ComboBox>

现在进行简单测试,添加0到8之间的数字给出:

uniform grid in combo box

现在你可以随心所欲地设计它......:)

当然,每个项目(每个数字,在这种特殊情况下)都是单独的,可点击的项目,只是没有误解。

[编辑]我刚刚注意到你想要以相反的方式做到这一点,那就是'行'方向,如果是这样,那么也许最好使用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>

enter image description here

答案 3 :(得分:0)

您可以尝试更改控件模板以使用Grid并使用转换器来确定cbitems的列和行。我不知道你如何处理所选项目。