3

我希望我在多个列ComboBox中显示s,如下所示:ComboBoxItem

有人可以告诉我该怎么做吗?

我可以使用这个:

        <ComboBox.ItemsPanel>
            <ItemsPanelTemplate>
                <UniformGrid Columns="3"/>
            </ItemsPanelTemplate>
        </ComboBox.ItemsPanel>

但它不允许我指定我想在哪里结束一列。

有没有办法ComboBox使用 s 中的Grid.Column属性,ComboBoxItem以便我可以将ComboBoxItems 添加到不同的列中?

4

2 回答 2

1

将 ItemsPanelTemplate 更改为 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="Item 1" />
    <ComboBoxItem Content="Item 2" />
    <ComboBoxItem Content="Item 3" />
    <ComboBoxItem Content="Item 4" />
    <ComboBoxItem Content="Item 5" />
    <ComboBoxItem Content="Item 5" />

</ComboBox>
于 2013-08-13T14:19:28.653 回答
0

您需要为Panel您的项目添加一个自定义并将其设置为ItemsPanel如下所示:

<ComboBox>
    <ComboBox.ItemsPanel>
        <ItemsPanelTemplate>
            <Controls:ColumnPanel />
        </ItemsPanelTemplate>
    </ComboBox.ItemsPanel>
</ComboBox>

您可以在本教程中了解如何创建自定义Panels 。

编辑>>>

我只是认为您可以从现有的Panel:中获得这个简单的布局:WrapPanel在我调查这个的时候给我一点时间。

进一步编辑>>>

好的,所以在 a 上有这些属性WrapPanelItemWidthItemHeight。这有点小技巧,但是如果您将 的ItemWidth属性设置为 的一半WrapPanel,那么您将拥有一个基本的两列。唯一的问题是您必须对这些值进行硬编码。WidthWrapPanelPanel

就个人而言,我建议花时间创建一个简单的可重用ColumnPanel控件,允许您设置所需的列数。我有一个,并且发现它有很多用途......它们也可以进入ListBox其他收集控件。

于 2013-08-13T14:17:45.033 回答