禁用 WPF ComboBox 的下拉菜单

3

我有一个如下所示的ComboBox:

<ComboBox Height="31" Margin="7,7,0,0" Name="callerID" IsEditable="True"  Background="LightBlue" KeyDown="callerIDbar_KeyDown" Foreground="White" FontSize="17"  FontWeight="Bold" HorizontalContentAlignment="Center" VerticalAlignment="Top" Grid.Row="0" Grid.Column="0"  />

storedCalls 是一个电话号码的集合,会被填充到 ComboBox.Items 中:

foreach (string call in storedCalls)
{
   if (call != "Enter a number to dial")
      callerID.Items.Add(call);
}

所有这些都运行良好,我填充了Items的主要内容,因为我喜欢由ComboBoxItems集合中的值驱动的自动完成功能。有没有一种方法在XAML中禁用下拉错误并禁用下拉菜单?也就是说,制作一个简单的自动完成文本框控件?我已经看到了包含大量代码后台和复杂标记的完整TextBox控件,这不是我想做的。我只需要禁用下拉菜单显示的能力。

1
我相信你必须更改模板。而且从我所看到的,它有点庞大... - trinaldi
1
你正在寻找一个“AutoCompleteTextBox”。你可以在WPF Toolkit中找到它。顺便说一下,在WPF中不要在过程化代码中操作UI元素,而是为此创建一个适当的ViewModel。 - Federico Berasategui
@Tico,你能稍微详细说明一下更改模板可能涉及到的内容吗?我不是专职WPF开发人员。 - kmarks2
@HighCore,是的,我担心我可能必须包含另一个资源或使用已经存在的控件。 在采取这种方法之前,向SO提问是我的最后努力。 感谢您的建议。 - kmarks2
@kmarks2 如果您右键单击您的 ComboBox -> 编辑模板 -> 复制编辑...,您将会看到控件是如何设计的。但是,既然您已经说过您不是全职的WPF开发人员,这可能对您来说非常困难!HighCore的建议可能是您需要的答案! - trinaldi
显示剩余2条评论
1个回答

5
你可以处理DropDownOpened事件,然后将其关闭。
所以在XAML中你可以这样写:
<ComboBox x:Name="cb" DropDownOpened="cb_DropDownOpened"/>

在代码后台:

private void cbCategoria_DropDownOpened(object sender, EventArgs e)
    {
        ComboBox cb = sender as ComboBox;
        cb.IsDropDownOpen = false;
    }

我更喜欢这个解决方案,而不是将MaxDropDownHeight设置为0。这是你的选择。

这比将 ComboBox 的 Enabled 属性设置为 false 更好用。 - Gsv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接