Add hot key support for the back button in title bar

This commit is contained in:
Kenny Guo 2021-07-27 16:36:23 +08:00
commit ba5e70510f
3 changed files with 51 additions and 8 deletions

View file

@ -578,7 +578,7 @@ namespace CalculatorApp
NarratorNotifier.Announce(announcement);
}
private void TitleBarBackButtonClick(object sender, RoutedEventArgs e)
private void TitleBarBackButtonClick(object sender)
{
CloseSettingsPopup();
}

View file

@ -28,6 +28,7 @@
<VisualState x:Name="BackButtonVisible">
<VisualState.Setters>
<Setter Target="BackButton.Visibility" Value="Visible"/>
<Setter Target="BackButton.IsEnabled" Value="True"/>
<Setter Target="AppIcon.Margin" Value="0"/>
</VisualState.Setters>
</VisualState>
@ -55,7 +56,12 @@
FontSize="12"
Click="BackButton_Click"
Content="&#xE72B;"
Visibility="Collapsed"/>
Visibility="Collapsed"
IsEnabled="False">
<Button.KeyboardAccelerators>
<KeyboardAccelerator Key="Left" Modifiers="Menu"/>
</Button.KeyboardAccelerators>
</Button>
<Grid x:Name="BackgroundElement"
Grid.Column="1"

View file

@ -51,7 +51,9 @@ namespace CalculatorApp
}));
public event Windows.UI.Xaml.RoutedEventHandler AlwaysOnTopClick;
public event Windows.UI.Xaml.RoutedEventHandler BackButtonClick;
public delegate void BackButtonClickEventHandler(object sender);
public event BackButtonClickEventHandler BackButtonClick;
private void OnLoaded(object sender, RoutedEventArgs e)
{
@ -63,6 +65,11 @@ namespace CalculatorApp
m_accessibilitySettings.HighContrastChanged += OnHighContrastChanged;
Window.Current.Activated += OnWindowActivated;
// Register the system back requested event
SystemNavigationManager.GetForCurrentView().BackRequested += System_BackRequested;
// Register the mouse back button event
Window.Current.CoreWindow.PointerPressed += CoreWindow_PointerPressed;
// Register RequestedTheme changed callback to update title bar system button colors.
m_rootFrameRequestedThemeCallbackToken =
Utils.ThemeHelper.RegisterAppThemeChangedCallback(RootFrame_RequestedThemeChanged);
@ -87,10 +94,34 @@ namespace CalculatorApp
m_uiSettings.ColorValuesChanged -= ColorValuesChanged;
m_accessibilitySettings.HighContrastChanged -= OnHighContrastChanged;
Window.Current.Activated -= OnWindowActivated;
SystemNavigationManager.GetForCurrentView().BackRequested -= System_BackRequested;
Window.Current.CoreWindow.PointerPressed -= CoreWindow_PointerPressed;
Utils.ThemeHelper.
UnregisterAppThemeChangedCallback(m_rootFrameRequestedThemeCallbackToken);
}
private void CoreWindow_PointerPressed(CoreWindow sender, PointerEventArgs e)
{
if (e.CurrentPoint.Properties.IsXButton1Pressed && BackButton.IsEnabled)
{
InvokeBackButton(sender);
e.Handled = true;
}
}
private void System_BackRequested(object sender, BackRequestedEventArgs e)
{
if (!e.Handled && BackButton.IsEnabled)
{
InvokeBackButton(sender) ;
e.Handled = true;
}
}
private void RootFrame_RequestedThemeChanged(DependencyObject sender, DependencyProperty dp)
{
if(Frame.RequestedThemeProperty == dp)
@ -211,6 +242,17 @@ namespace CalculatorApp
AlwaysOnTopClick?.Invoke(this, e);
}
// Called when BackButton invoked, for example, by clicking, access key and etc.
private void InvokeBackButton(object sender)
{
BackButtonClick?.Invoke(this);
}
private void BackButton_Click(object sender, RoutedEventArgs e)
{
InvokeBackButton(sender);
}
// Dependency properties for the color of the system title bar buttons
public Windows.UI.Xaml.Media.SolidColorBrush ButtonBackground
{
@ -294,10 +336,5 @@ namespace CalculatorApp
private Windows.UI.ViewManagement.UISettings m_uiSettings;
private Windows.UI.ViewManagement.AccessibilitySettings m_accessibilitySettings;
private Utils.ThemeHelper.ThemeChangedCallbackToken m_rootFrameRequestedThemeCallbackToken;
private void BackButton_Click(object sender, RoutedEventArgs e)
{
BackButtonClick?.Invoke(this, e);
}
}
}