5

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

例如像这样:

CB精选项目

CB 项目 1 | CB 项目 4

CB 项目 2 | CB 项目 5

CB 项目 3 |

4

4 回答 4

6

好吧,你可以,这是 XAML:

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

现在做一个简单的测试,将 0 到 8 的数字相加得到:

组合框中的统一网格

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

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

[编辑] 我刚刚注意到您想以“相反的方式”进行操作,即在“行”的方向上,如果是这样,那么WrapPanel正如其他答案中有人建议的那样,最好使用相反的方式。首先UniformGrid在列方向上填充网格。

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

于 2013-02-04T13:23:22.157 回答
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>
于 2013-02-04T13:23:44.540 回答
2

您需要将 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>

在此处输入图像描述

于 2013-02-04T13:15:23.240 回答
0

您可以尝试更改控制模板以使用 Grid 并使用转换器来决定 cbitems 是哪一列和哪一行。不过,我不确定您将如何处理所选项目。

于 2013-02-04T13:12:27.370 回答