wpf autocompletebox默认下拉区域太小

时间:2014-06-18 02:26:59

标签: wpf autocompletebox

我设置自动完成框就像这样:

         <StackPanel Orientation="Horizontal">
            <StackPanel Width="120">
                <Label Content="Address"/>
                <Controls:AutoCompleteBox x:Name="AddressBox" MaxDropDownHeight="300" Populating="Address_Populating"/>
            </StackPanel>
            <StackPanel Width="120" Margin="40, 0, 0, 0">
                <Label Content="Port"/>
                <TextBox x:Name="PortBox" />
            </StackPanel>
            <Button x:Name="ConnectButton" Content="Connect" Margin="40, 0, 0, 0" VerticalAlignment="Bottom" Width="80" Height="35" Click="ConnectButton_Clicked"/>
        </StackPanel>

但下拉窗口中显示的最大项目数仅为3.我确信候选编号大于3.我想增加将在下拉窗口中显示的项目数。

例如,我想显示15个candidateAddress的项目。并将显示下拉窗口,首先显示3个项目。但我希望它首先能显示5个项目,这意味着应该扩展显示区域。

此控件的逻辑代码为:

    private void Address_Populating(object sender, PopulatingEventArgs e)
    {
        string dirFile = "../../Config/Address.config";

        if (File.Exists(dirFile))
        {
            var candidateAddress = new List<string>();
            string input = null;

            using (StreamReader sr = File.OpenText(dirFile))
            {
                while ((input = sr.ReadLine()) != null)
                {
                    candidateAddress.Add(input);
                }
            }

            AddressBox.ItemsSource = candidateAddress;
            AddressBox.PopulateComplete();
        }
        else
        {
            System.Windows.MessageBox.Show("Address.config does not exist");
        }
    }

2 个答案:

答案 0 :(得分:0)

我无法添加照片进行评论。所以我在这里添加它。

top pic:MaxDropDownHeight = 50

bottom:MaxDropDownHeight = 300

你是说这个意思吗?

enter image description here

您可以创建一个新项目:

     <Grid>
        <control:AutoCompleteBox x:Name="AddressBox" FontSize="30" MaxDropDownHeight="300"
Populating="Address_Populating" Margin="0,0,0,287.283" />
    </Grid>

后台代码:

private void Address_Populating(object sender, PopulatingEventArgs e)
        {
            List<int> lst = new List<int>();
            for (int i = 10; i < 25; i++)
            {
                lst.Add(i);
            }
            AddressBox.ItemsSource = lst;
            AddressBox.PopulateComplete();
        }

原因是kylejan发现的: 我找到了原因。显示区域将受到前一个窗口的影响。例如,我把这个控件打开的窗口是由主窗口打开的。那么这个自动完成框将受到主窗口大小的影响

答案 1 :(得分:0)

没有简单的方法(包含在框架中)来准确设置要显示的项目数。但是this示例为您提供了一些代码来创建一个附加属性,该属性操纵maxheight属性以显示任何指定数量的项目。