【问题标题】:wpf autocompletebox default dropdown area is too smallwpf autocompletebox默认下拉区域太小
【发布时间】:2014-06-18 02:26:59
【问题描述】:

我这样设置自动完成框:

         <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 个候选地址的项目。然后会显示下拉窗口,首先显示 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");
        }
    }

【问题讨论】:

  • 哪个工具包/dll?你应该提供它。
  • 工具包的网址是link
  • 您能提供您的代码吗?我已经测试过了,一切都是正确的。
  • 你的意思是逻辑代码吗?我已经提供了。我可以正确运行这个控件。但是我想扩大显示窗口的面积。
  • 不是显示区域的问题。检查candidateAddress的项目和你输入的文字。你能给他们看看吗?

标签: wpf autocompletebox


【解决方案1】:

我无法添加图片来发表评论。所以我在这里添加它。

上图:MaxDropDownHeight=50

底部:MaxDropDownHeight=300

你的意思是这样吗?

您可以创建一个新项目:

     <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 找到了原因: 我找到了原因。显示区域将受前一个窗口的影响。例如,我放置此控件的窗口由主窗口打开。那么这个自动完成框会受到主窗口大小的影响

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 非常感谢!我找到了影响面积大小的原因
    • 您知道您必须将此答案标记为解决方案吗?! ;)
    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2010-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2014-09-17
    相关资源
    最近更新 更多