bugmagnet
bugmagnet

Reputation: 7769

How to stop RichEditBox from attempting to interpret KeyboardAccelerators on Buttons?

I have some buttons that use KeyboardAccelerators

        <Button x:Name="butPrevPanel" AutomationProperties.Name="Previous Panel" ToolTipService.ToolTip="Previous Panel" RelativePanel.RightOf="butGo" RelativePanel.Below="menuBar"
                Click="Button_PreviousPanel_Click">
            <Button.Content>
                <FontIcon FontFamily="Segoe MDL2 Assets" Glyph="&#xE892;" />
            </Button.Content>
            <Button.KeyboardAccelerators>
                <KeyboardAccelerator Modifiers="Control,Shift" Key="Tab"/>
            </Button.KeyboardAccelerators>
        </Button>
        <Button x:Name="butNextPanel" AutomationProperties.Name="Previous Panel" ToolTipService.ToolTip="Previous Panel" RelativePanel.RightOf="butPrevPanel" RelativePanel.Below="menuBar"
                Click="Button_NextPanel_Click">
            <Button.Content>
                <FontIcon FontFamily="Segoe MDL2 Assets" Glyph="&#xE893;" />
            </Button.Content>
            <Button.KeyboardAccelerators>
                <KeyboardAccelerator Modifiers="Control" Key="Tab"/>
            </Button.KeyboardAccelerators>
        </Button>

How do I stop my RichEditBoxes from intercepting these KeyboardAccelerators when focus is on the RichEditBox?

Upvotes: 0

Views: 75

Answers (1)

Andrew KeepCoding
Andrew KeepCoding

Reputation: 13666

You can use the Invoked event:

<Page
    x:Class="KeyboardAcceleratorsDemo.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="using:KeyboardAcceleratorsDemo"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
    mc:Ignorable="d">

    <Grid RowDefinitions="Auto,*">
        <StackPanel Grid.Row="0">
            <Button Click="Button_Click">
                <Button.KeyboardAccelerators>
                    <KeyboardAccelerator
                        Key="F2"
                        Invoked="KeyboardAccelerator_Invoked"
                        Modifiers="None" />
                </Button.KeyboardAccelerators>
            </Button>

        </StackPanel>
        <RichEditBox
            Grid.Row="1"
            GotFocus="RichEditBox_GotFocus"
            LostFocus="RichEditBox_LostFocus" />
    </Grid>

</Page>
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        InitializeComponent();
    }

    private bool IgnoreKeyboardAccelerators { get; set; }

    private void Button_Click(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
    {
        System.Diagnostics.Debug.WriteLine("Button Clicked");
    }

    private void KeyboardAccelerator_Invoked(Microsoft.UI.Xaml.Input.KeyboardAccelerator sender, Microsoft.UI.Xaml.Input.KeyboardAcceleratorInvokedEventArgs args)
    {
        args.Handled = IgnoreKeyboardAccelerators;
    }

    private void RichEditBox_GotFocus(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
    {
        IgnoreKeyboardAccelerators = true;
    }

    private void RichEditBox_LostFocus(object sender, Microsoft.UI.Xaml.RoutedEventArgs e)
    {
        IgnoreKeyboardAccelerators = false;
    }
}

Upvotes: 1

Related Questions