Reputation: 7769
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="" />
</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="" />
</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
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