在失去焦点后保持Silverlight Combobox DropDown打开

时间:2008-12-15 16:55:18

标签: silverlight

是否可以避免在LostFocus之后自动崩溃Silverlight ComboBox?

2 个答案:

答案 0 :(得分:2)

好吧,看看反汇编的代码看起来像是

protected override void OnLostFocus(RoutedEventArgs e) { base.OnLostFocus(e); this.FocusChanged(this.HasFocus()); }

是覆盖的好选择。

如果不实现自己的控制子类,就无法解决问题。

我做了同样的事情,让ComboBox Popuppublic class ComboBoxWithMultiSelect : ComboBox { protected override void OnKeyDown(KeyEventArgs e) { if (base.IsDropDownOpen && (e.Key == Key.Enter || e.Key == Key.Space)) { e.Handled = true; } else { base.OnKeyDown(e); } } protected override DependencyObject GetContainerForItemOverride() { return new ComboBoxItemWithMultiSelect(); } } public class ComboBoxItemWithMultiSelect : ComboBoxItem { protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e) { if (e == null) { throw new ArgumentNullException("e"); } if (!e.Handled) { e.Handled = true; } } } 在我选择项目时没有关闭(我希望有多选行为)。

如果有人有兴趣,这是我的课程(对我来说效果很好):

{{1}}

答案 1 :(得分:1)

我认为没有一个简单的方法可以解决这个问题。下面的代码是从ComboBox类的反汇编代码中复制的。正如您所看到的,当hasFocus为false时,它总是关闭。我认为没有办法解决这个问题。编写自己的ComboBox是一种解决方案。

private void FocusChanged(bool hasFocus)
{
    this.UpdateSelectionBoxHighlighted();
    base.SetValueInternal(IsSelectionActiveProperty, hasFocus, true);
    if (!hasFocus)
    {
        this.IsDropDownOpen = false;
    }
}