Ну, глядя на разобранный код, он выглядит как
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;
}
}
}