protected override void OnKeyDown (KeyEventArgs e)
{
base.OnKeyDown (e);
if (!e.Handled) {
e.Handled = true;
switch (e.Key) {
case Key.Escape:
IsDropDownOpen = false;
break;
case Key.Enter:
case Key.Space:
if (IsDropDownOpen && FocusedIndex != SelectedIndex) {
SelectedIndex = FocusedIndex;
IsDropDownOpen = false;
} else {
IsDropDownOpen = true;
}
break;
case Key.Down:
if (IsDropDownOpen) {
if (FocusedIndex < Items.Count - 1) {
FocusedIndex ++;
((Control) ItemContainerGenerator.ContainerFromIndex (FocusedIndex)).Focus ();
}
} else {
SelectedIndex = Math.Min (SelectedIndex + 1, Items.Count - 1);
}
break;
case Key.Up:
if (IsDropDownOpen) {
if (FocusedIndex > 0) {
FocusedIndex --;
((Control) ItemContainerGenerator.ContainerFromIndex (FocusedIndex)).Focus ();
}
} else if (SelectedIndex != -1) {
SelectedIndex = Math.Max (SelectedIndex - 1, 0);
}
break;
default:
e.Handled = false;
break;
}
} else {
Console.WriteLine ("Already handled");
}
}