【发布时间】:2010-02-25 22:48:39
【问题描述】:
我有一个 AutoCompleteBox,它需要使用其他一些控件来包装过滤后的项目,例如指向不同搜索表单的链接。即使过滤列表为空,我也需要显示 AutoCompleteBox 的下拉列表。
目前,当项目列表被过滤为空时,AutoCompleteBox 会强制关闭弹出窗口。
我如何在一个空的项目列表中保持 dang 弹出窗口打开?
【问题讨论】:
我有一个 AutoCompleteBox,它需要使用其他一些控件来包装过滤后的项目,例如指向不同搜索表单的链接。即使过滤列表为空,我也需要显示 AutoCompleteBox 的下拉列表。
目前,当项目列表被过滤为空时,AutoCompleteBox 会强制关闭弹出窗口。
我如何在一个空的项目列表中保持 dang 弹出窗口打开?
【问题讨论】:
不久前,我在将继承的 AutoCompleteBox 从 SL2 迁移到 SL3 时遇到了这个问题,因此请注意,这些代码示例来自直接继承自 AutoCompleteBox 的自定义控件。
首先,我声明了一个类级变量来保存 AutoCompleteBox 的 Popup 部分:
private Popup dropdownPopup = null;
然后,覆盖 OnApplyTemplate 方法,您可以从默认的 AutoCompleteBox 模板中获取 Popup:
this.dropdownPopup = this.GetTemplateChild("Popup") as Popup;
现在,您可以处理 AutoCompleteBox 的 KeyDown 事件并随时显示您的弹出窗口。
protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e)
{
base.OnKeyDown(e);
this.dropdownPopup.IsOpen = true;
}
最后,如果 AutoCompleteBox 的 Text 属性为空,您可能会遇到问题,我发现 Popup 在这种情况下仍然不想打开。如果我仍然希望它打开,我只需将 Text 设置为一个空格,就克服了这个问题。
【讨论】: