private void KeyDownHandler(KeyEventArgs e)
{
bool handled = false;
Key key = e.Key;
// Only process key events if they haven't been handled or are from our text box
if (e.Handled == false)
{
// We want to handle Alt key. Get the real key if it is Key.System.
if (key == Key.System)
{
key = e.SystemKey;
}
switch (key)
{
case Key.Up:
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
{
KeyboardToggleDropDown(!IsDropDownOpen, true /* commitSelection */);
handled = true;
}
break;
case Key.Down:
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt)
{
KeyboardToggleDropDown(!IsDropDownOpen, true /* commitSelection */);
handled = true;
}
else if (IsDropDownOpen)
{
SelectFocusableDate();
handled = true;
}
break;
case Key.F4:
if ((e.KeyboardDevice.Modifiers & ModifierKeys.Alt) == 0)
{
KeyboardToggleDropDown(!IsDropDownOpen, true /* commitSelection */);
handled = true;
}
break;
case Key.Escape:
if (IsDropDownOpen)
{
KeyboardToggleDropDown(false, false /* commitSelection */);
handled = true;
}
break;
case Key.Enter:
if (IsDropDownOpen)
{
KeyboardToggleDropDown(false, true /* commitSelection */);
handled = true;
}
break;
case Key.Tab:
if (IsDropDownOpen)
{
IsDropDownOpen = false;
}
break;
default:
break;
}
if (handled)
{
e.Handled = true;
}
}
}