C#WPF Combobox下拉列表到多列

Kri*_*sto 5 c# wpf combobox list multiple-columns

是否有可能"强制"列表中的组合框项目出现在两列中?

例如这样:

CB选择项目

CB项目1 | CB项目4

CB项目2 | CB项目5

CB项目3 |

Pat*_*iek 6

嗯,你可以,这是XAML:

<ComboBox Name="ComboBox">
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid Columns="2"/>
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
</ComboBox>
Run Code Online (Sandbox Code Playgroud)

现在一个简单的测试,添加从0到8的数字给出:

组合框中的统一网格

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

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

[编辑]我刚刚注意到你想要'相反的方式',即在'行'方向,如果是这样,那么也许最好使用WrapPanel相反,如在另一个答案中建议的那样.首先UniformGrid在列方向上填充网格.

也许有一种方法可以做到这一点UniformGrid,但没有明显和简单的一键更改(我以前在这里错了:))


mat*_*ieu 6

您可以将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>
Run Code Online (Sandbox Code Playgroud)