Сочетания клавиш не работают после отображения messagebox

#wpf #vb.net #xaml #key-bindings #inputbinding

#wpf #vb.net #xaml #привязки клавиш #привязка ввода

Вопрос:

У меня есть окно с привязками клавиш в InputBindings, определенными. Они работают в первый раз, и когда я устанавливаю фокус на любой элемент управления в форме.

Но когда отображается Messagbox и я нажимаю «OK», эти сочетания клавиш не работают, пока я не установлю фокус на элементе управления в моем окне.

Мои входные привязки:

 <Window.InputBindings>
    <KeyBinding Gesture="Ctrl N" Command="{x:Static local:MainWindow.NewMenuCommand}" />
    <KeyBinding Gesture="Ctrl O" Command="{x:Static local:MainWindow.OpenMenuCommand}" />
    <KeyBinding Gesture="Ctrl S" Command="{x:Static local:MainWindow.SaveMenuCommand}" />
    <KeyBinding Gesture="Ctrl Q" Command="{x:Static local:MainWindow.CloseMenuCommand}" />
</Window.InputBindings>
  

Мои командные привязки:

 <Window.CommandBindings>
    <CommandBinding Command="{x:Static local:MainWindow.NewMenuCommand}" Executed="NewEntity" />
    <CommandBinding Command="{x:Static local:MainWindow.OpenMenuCommand}" Executed="OpenEntity" />
    <CommandBinding Command="{x:Static local:MainWindow.SaveMenuCommand}" Executed="SaveEntity" />
    <CommandBinding Command="{x:Static local:MainWindow.CloseMenuCommand}" Executed="CloseEntity" />
</Window.CommandBindings>
  

Ответ №1:

Я также сталкивался с этой проблемой некоторое время назад, это как-то связано с фокусом вашего окна, но я действительно нашел один способ решить ее следующим образом —

 <Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Activated="HandleWindowActivated"
    Title="Window1" Height="300" Width="300">
  

И в вашем коде за этим поместите фокус на окно следующим образом —

 private void HandleWindowActivated(object sender, EventArgs e)
{
    this.Focus();
} 
  

Комментарии:

1. Это было связано с тем, что не был определен родитель / владелец Messagebox. С помощью MessageBox. Показать (я, «Сохранить») Вместо: MsgBox («Сохранить») исправил эту проблему

2. Хорошо, на самом деле в моем случае я внедрил свое пользовательское окно сообщения, и настройка отношения родитель / потомок также не сработала для меня. Вот почему я использовал описанный выше подход..