Pregunta ¿Cómo puedo manejar una tecla de acceso directo en cada ventana de WPF?


Quiero abrir el archivo de ayuda en una página basada en alguna lógica personalizada. ¿Cómo puedo manejar al usuario presionando F1 en todas mis ventanas (ventana principal y diálogos modales)?

Sé cómo manejar F1 en una sola ventana, pero ¿se puede hacer de forma global, así que no tengo que agregar el mismo código a todas mis ventanas?

A continuación se muestra la prueba con la que he probado que F1 no funciona en la ventana secundaria.

Window1.xaml:

<Window x:Class="WpfApplication2.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Window.CommandBindings>
        <CommandBinding Command="ApplicationCommands.Help"
                        Executed="CommandBinding_Executed"/>
    </Window.CommandBindings>
    <Grid>
        <Button Content="Open a new window"
                Click="Button_Click"/>
    </Grid>
</Window>

Window1.xaml.cs:

using System.Windows;
using System.Windows.Input;

namespace WpfApplication2
{
    partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            MessageBox.Show("Help");
        }

        void Button_Click(object sender, RoutedEventArgs e)
        {
            new Window().ShowDialog();
        }
    }
}

7
2017-07-17 16:58


origen


Respuestas:


Encontré la respuesta en esta página. Es decir, pon esto en el constructor de la ventana principal, por ejemplo:

CommandManager.RegisterClassCommandBinding(typeof(Window),
    new CommandBinding(ApplicationCommands.Help,
        (x, y) => MessageBox.Show("Help")));

11
2017-07-17 18:00