是否可以避免在LostFocus之后自动崩溃Silverlight ComboBox?
答案 0 :(得分:2)
好吧,看看反汇编的代码看起来像是
protected override void OnLostFocus(RoutedEventArgs e)
{
base.OnLostFocus(e);
this.FocusChanged(this.HasFocus());
}
是覆盖的好选择。
如果不实现自己的控制子类,就无法解决问题。
我做了同样的事情,让ComboBox
Popup
与public 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;
}
}