bir çözüm sahibi olmak geçersiz kılmak için Pencerenin OnKeyDown
yöntemini kullanın ve klavye olayına uyan bir KeyGesture
olan bir menü öğesini arayın. İşte
Pencere onkeydown geçersiz kılma kodudur:
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
// here I suppose the window's menu is named "MainMenu"
MainMenu.RaiseMenuItemClickOnKeyGesture(e);
}
Ve burada klavye olayı bir menü öğesi eşleşen yarar kodudur:
public static void RaiseMenuItemClickOnKeyGesture(this ItemsControl control, KeyEventArgs args) => RaiseMenuItemClickOnKeyGesture(control, args, true);
public static void RaiseMenuItemClickOnKeyGesture(this ItemsControl control, KeyEventArgs args, bool throwOnError)
{
if (args == null)
throw new ArgumentNullException(nameof(args));
if (control == null)
return;
var kgc = new KeyGestureConverter();
foreach (var item in control.Items.OfType<MenuItem>())
{
if (!string.IsNullOrWhiteSpace(item.InputGestureText))
{
KeyGesture gesture = null;
if (throwOnError)
{
gesture = kgc.ConvertFrom(item.InputGestureText) as KeyGesture;
}
else
{
try
{
gesture = kgc.ConvertFrom(item.InputGestureText) as KeyGesture;
}
catch
{
}
}
if (gesture != null && gesture.Matches(null, args))
{
item.RaiseEvent(new RoutedEventArgs(MenuItem.ClickEvent));
args.Handled = true;
return;
}
}
RaiseMenuItemClickOnKeyGesture(item, args, throwOnError);
if (args.Handled)
return;
}
}