Add accelerator for back button in titlebar (#1626)

Listen to the system back request to back to main page.
This commit is contained in:
Kenny Guo 2021-07-30 15:49:22 +08:00 committed by GitHub
parent a2b7dfa5a6
commit 2f05d7ebbc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 28 additions and 6 deletions

View File

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

View File

@ -7,6 +7,8 @@
using Windows.UI.Core; using Windows.UI.Core;
using Windows.UI.ViewManagement; using Windows.UI.ViewManagement;
using Windows.UI.Xaml; using Windows.UI.Xaml;
using Windows.UI.Xaml.Automation.Peers;
using Windows.UI.Xaml.Automation.Provider;
using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Media;
@ -63,6 +65,9 @@ private void OnLoaded(object sender, RoutedEventArgs e)
m_accessibilitySettings.HighContrastChanged += OnHighContrastChanged; m_accessibilitySettings.HighContrastChanged += OnHighContrastChanged;
Window.Current.Activated += OnWindowActivated; Window.Current.Activated += OnWindowActivated;
// Register the system back requested event
SystemNavigationManager.GetForCurrentView().BackRequested += System_BackRequested;
// Register RequestedTheme changed callback to update title bar system button colors. // Register RequestedTheme changed callback to update title bar system button colors.
m_rootFrameRequestedThemeCallbackToken = m_rootFrameRequestedThemeCallbackToken =
Utils.ThemeHelper.RegisterAppThemeChangedCallback(RootFrame_RequestedThemeChanged); Utils.ThemeHelper.RegisterAppThemeChangedCallback(RootFrame_RequestedThemeChanged);
@ -87,10 +92,25 @@ private void OnUnloaded(object sender, RoutedEventArgs e)
m_uiSettings.ColorValuesChanged -= ColorValuesChanged; m_uiSettings.ColorValuesChanged -= ColorValuesChanged;
m_accessibilitySettings.HighContrastChanged -= OnHighContrastChanged; m_accessibilitySettings.HighContrastChanged -= OnHighContrastChanged;
Window.Current.Activated -= OnWindowActivated; Window.Current.Activated -= OnWindowActivated;
SystemNavigationManager.GetForCurrentView().BackRequested -= System_BackRequested;
Utils.ThemeHelper. Utils.ThemeHelper.
UnregisterAppThemeChangedCallback(m_rootFrameRequestedThemeCallbackToken); UnregisterAppThemeChangedCallback(m_rootFrameRequestedThemeCallbackToken);
} }
private void System_BackRequested(object sender, BackRequestedEventArgs e)
{
if (!e.Handled && BackButton.IsEnabled)
{
var buttonPeer = new ButtonAutomationPeer(BackButton);
IInvokeProvider invokeProvider = buttonPeer.GetPattern(PatternInterface.Invoke) as IInvokeProvider;
invokeProvider.Invoke();
e.Handled = true;
}
}
private void RootFrame_RequestedThemeChanged(DependencyObject sender, DependencyProperty dp) private void RootFrame_RequestedThemeChanged(DependencyObject sender, DependencyProperty dp)
{ {
if(Frame.RequestedThemeProperty == dp) if(Frame.RequestedThemeProperty == dp)
@ -211,6 +231,11 @@ private void AlwaysOnTopButton_Click(object sender, RoutedEventArgs e)
AlwaysOnTopClick?.Invoke(this, e); AlwaysOnTopClick?.Invoke(this, e);
} }
private void BackButton_Click(object sender, RoutedEventArgs e)
{
BackButtonClick?.Invoke(this, e);
}
// Dependency properties for the color of the system title bar buttons // Dependency properties for the color of the system title bar buttons
public Windows.UI.Xaml.Media.SolidColorBrush ButtonBackground public Windows.UI.Xaml.Media.SolidColorBrush ButtonBackground
{ {
@ -294,10 +319,5 @@ public Visibility BackButtonVisibility
private Windows.UI.ViewManagement.UISettings m_uiSettings; private Windows.UI.ViewManagement.UISettings m_uiSettings;
private Windows.UI.ViewManagement.AccessibilitySettings m_accessibilitySettings; private Windows.UI.ViewManagement.AccessibilitySettings m_accessibilitySettings;
private Utils.ThemeHelper.ThemeChangedCallbackToken m_rootFrameRequestedThemeCallbackToken; private Utils.ThemeHelper.ThemeChangedCallbackToken m_rootFrameRequestedThemeCallbackToken;
private void BackButton_Click(object sender, RoutedEventArgs e)
{
BackButtonClick?.Invoke(this, e);
}
} }
} }