如何减少comboBox项目之间的间距和/或显示所有项目?

时间:2012-11-15 02:35:04

标签: c# combobox windows-8 winrt-xaml

在我的包含很多项目(> 10)的组合框中,我需要: (a)下拉发生时显示所有项目 -要么: (b)减少物品之间的空间(看起来过度,几乎“卡通”)

所以,我真的更喜欢两者。我怎么能做其中一个或两个?

似乎MaxDropDownHeight属性只是票证,但设置为Infinity它不起作用/有一个奇怪的Infinity定义。

以下是其中一个有此问题的XAML:

<ComboBox x:Name="comboBoxDay" Grid.Row="4" Grid.Column="5" Margin="8" IsEnabled="False"></ComboBox>

......以及它包含的内容:

for (int i = 1; i < 32; i++)
{
    comboBoxDay.Items.Add(i);
}

更新

将高度设置为15会切断部分文字; 18.即便如此,只显示3月至11月。我还将MaxDropDownHeight设置为320,然后是520.这是所讨论的comboBox的整个XAML:

        <ComboBox x:Name="comboBoxFromMonth" Grid.Row="1" Grid.Column="1" 
Height="24" Width="80" MaxDropDownHeight="520" HorizontalAlignment="Left" 
VerticalAlignment="Center" Margin="4">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding}" Height="20" />
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>

...(1月,2月和12月仍然不显示没有滚动,虽然下面有足够的空间 - 房地产不是问题。)

看起来组合框中的所有项目都应该显示BY DEFAULT,而不是要求跳过箍来显示所有项目...至少使用合理数量的项目(42或更少)。

2 个答案:

答案 0 :(得分:1)

对于(a),你是对的,你可以使用MaxDropDownHeight,但它只会进入屏幕的顶部/底部,而不会再进一步​​。要使其垂直填充屏幕,您需要修改默认Control Template并为弹出式Placement属性赋予不同的值(例如Center):

对于(b),您可以通过定义ItemTemplate

来缩小元素之间的空间
<ComboBox>
    <ComboBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" Height="15" />
        </DataTemplate>
    </ComboBox.ItemTemplate>
</ComboBox>

答案 1 :(得分:0)

我也试图让Popup向下显示,最后在编辑模板后设置边距。在给定的链接中有一个命令PopupPlacement,但它在WinRT中不起作用。但这个提示帮助我理解了这个想法。