es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

MenuFlyoutItem.KeyboardAccelerators dispara el evento Invoked dos veces.

He implementado MenuFlyoutItem.KeyboardAccelerators y a continuación puedes ver el código:

Código Xaml:

        <Button Content="Editar opciones"
            Width="100"
            Height="100"
            HorizontalAlignment="Right">
        <Button.Flyout>
            <MenuFlyout>
                <MenuFlyoutItem x:Name="FlyoutItem1" Text="Copiar" Icon="Copiar">
                    <MenuFlyoutItem.KeyboardAccelerators>
                        <KeyboardAccelerator x:Name="Test" Key="C" Modifiers="Control" Invoked="Test_Invoked" />
                    </MenuFlyoutItem.KeyboardAccelerators>
                </MenuFlyoutItem>
                <MenuFlyoutSeparator/>
            </MenuFlyout>
        </Button.Flyout>
    </Button>

Código de code-behind:

    public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }
    private void Test_Invoked(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs args)
    {
        Debug.WriteLine($">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> invoked Hash = {sender.GetHashCode()}");
    }
}

Antes de hacer clic en el botón de la aplicación, la acción del atajo Ctrl+C dispara un evento. Pero cuando hago clic en el botón y aparece el MenuFlyout, la acción del atajo Ctrl+C dispara dos veces el mismo evento. Y cuando hago clic en otro lugar de la aplicación, el evento vuelve a dispararse normalmente solo una vez.


Si quieres probar la aplicación, sigue este enlace: enlace de prueba

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para el problema con los aceleradores de teclado del MenuFlyoutItem

    El problema con los aceleradores de teclado del MenuFlyoutItem que causaba que el evento de la tecla de acceso rápido se activara dos veces puede solucionarse configurando la propiedad ShouldProcessKeyboardAccelerators del control MenuFlyout en false. Esta propiedad evita que el MenuFlyout procese el evento del acelerador de teclado y permite que el evento sea procesado por el control principal.

    El código Xaml actualizado para el Button.Flyout es el siguiente:

    <button content="Editar opciones" width="100" height="100" horizontalalignment="Right">
        <button.flyout>
            <menuflyout shouldprocesskeyboardaccelerators="False">
                <menuflyoutitem x:name="FlyoutItem1" text="Copiar" icon="Copy">
                    <menuflyoutitem.keyboardaccelerators>
                        <keyboardaccelerator x:name="Test" key="C" modifiers="Control" invoked="Test_Invoked"></keyboardaccelerator>
                    </menuflyoutitem.keyboardaccelerators>
                </menuflyoutitem>
                <menuflyoutseparator></menuflyoutseparator>
            </menuflyout>
        </button.flyout>
    </button>
    

    Con esta modificación, el evento Test_Invoked se activará solo una vez incluso cuando el MenuFlyout esté abierto.

    Nota: La propiedad ShouldProcessKeyboardAccelerators también se puede configurar en True para permitir que el MenuFlyout procese el evento del acelerador de teclado. Sin embargo, esto puede causar que se activen varios eventos, como en el problema original.

Comments are closed.