Skip to content

Commit 0bce9fc

Browse files
authored
Fixed two issues with keyboard navigation (#2037)
* Keyboard Input: Better enable selection of various focusable controls via enter key * Keyboard Navigation: Make sure all sidebar items are tab stop enabled * Remove Redundant NavigationViewItem Template
1 parent c9aa94d commit 0bce9fc

File tree

4 files changed

+7
-137
lines changed

4 files changed

+7
-137
lines changed

Files/UserControls/SidebarControl.xaml

Lines changed: 3 additions & 134 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,14 @@
22
x:Class="Files.Controls.SidebarControl"
33
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
44
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5-
xmlns:Windows10version1903="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 8)"
6-
xmlns:contract4NotPresent="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,4)"
7-
xmlns:contract4Present="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,4)"
8-
xmlns:contract7NotPresent="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,7)"
9-
xmlns:contract7Present="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,7)"
105
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
11-
xmlns:local="using:Files.Controls"
6+
xmlns:Windows10version1903="http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 8)"
127
xmlns:local1="using:Files"
8+
xmlns:local="using:Files.Controls"
139
xmlns:local2="using:Files.Filesystem"
1410
xmlns:local3="using:Files.Views"
1511
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
16-
xmlns:media="using:Microsoft.UI.Xaml.Media"
17-
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
18-
xmlns:primitiveContract7Present="using:Microsoft.UI.Xaml.Controls.Primitives?IsApiContractPresent(Windows.Foundation.UniversalApiContract,7)"
19-
xmlns:primitives="using:Microsoft.UI.Xaml.Controls.Primitives"
12+
xmlns:muxc="using:Microsoft.UI.Xaml.Controls"
2013
d:DesignHeight="768"
2114
d:DesignWidth="200"
2215
mc:Ignorable="d">
@@ -34,125 +27,6 @@
3427
TintOpacity="{x:Bind AppSettings.AcrylicTheme.TintOpacity, Mode=OneWay}" />
3528
</ResourceDictionary>
3629
<ResourceDictionary>
37-
<Style x:Key="DefaultSidebarStyle" TargetType="muxc:NavigationViewItem">
38-
<Setter Property="Foreground" Value="{ThemeResource NavigationViewItemForeground}" />
39-
<Setter Property="Background" Value="{ThemeResource NavigationViewItemBackground}" />
40-
<Setter Property="BorderBrush" Value="{ThemeResource NavigationViewItemBorderBrush}" />
41-
<Setter Property="BorderThickness" Value="{StaticResource NavigationViewItemBorderThickness}" />
42-
<Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
43-
<Setter Property="FontWeight" Value="Normal" />
44-
<Setter Property="FontSize" Value="{ThemeResource ControlContentThemeFontSize}" />
45-
<Setter Property="UseSystemFocusVisuals" Value="True" />
46-
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
47-
<Setter Property="TabNavigation" Value="Once" />
48-
<Setter Property="CornerRadius" Value="{ThemeResource ControlCornerRadius}" />
49-
<Setter Property="Template">
50-
<Setter.Value>
51-
<ControlTemplate TargetType="muxc:NavigationViewItem">
52-
<Grid x:Name="NVIRootGrid">
53-
<Grid.RowDefinitions>
54-
<RowDefinition Height="*" />
55-
<RowDefinition Height="Auto" />
56-
</Grid.RowDefinitions>
57-
58-
<primitives:NavigationViewItemPresenter
59-
x:Name="NavigationViewItemPresenter"
60-
Margin="{TemplateBinding Margin}"
61-
Padding="{TemplateBinding Padding}"
62-
HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
63-
VerticalAlignment="{TemplateBinding VerticalAlignment}"
64-
HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"
65-
VerticalContentAlignment="{TemplateBinding VerticalContentAlignment}"
66-
primitiveContract7Present:CornerRadius="{TemplateBinding CornerRadius}"
67-
Background="{TemplateBinding Background}"
68-
BorderBrush="{TemplateBinding BorderBrush}"
69-
BorderThickness="{TemplateBinding BorderThickness}"
70-
Content="{TemplateBinding Content}"
71-
ContentTemplate="{TemplateBinding ContentTemplate}"
72-
ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"
73-
ContentTransitions="{TemplateBinding ContentTransitions}"
74-
Control.IsTemplateFocusTarget="True"
75-
Foreground="{TemplateBinding Foreground}"
76-
Icon="{TemplateBinding Icon}"
77-
IsTabStop="false"
78-
UseSystemFocusVisuals="{TemplateBinding UseSystemFocusVisuals}" />
79-
<muxc:ItemsRepeater
80-
x:Name="NavigationViewItemMenuItemsHost"
81-
Grid.Row="1"
82-
Visibility="Collapsed">
83-
<muxc:ItemsRepeater.Layout>
84-
<muxc:StackLayout Orientation="Vertical" />
85-
</muxc:ItemsRepeater.Layout>
86-
</muxc:ItemsRepeater>
87-
<FlyoutBase.AttachedFlyout>
88-
<Flyout
89-
x:Name="ChildrenFlyout"
90-
contract7NotPresent:Placement="Right"
91-
contract7Present:Placement="RightEdgeAlignedTop">
92-
<Flyout.FlyoutPresenterStyle>
93-
<Style TargetType="FlyoutPresenter">
94-
<!-- Set negative top margin to make the flyout align exactly with the button -->
95-
<Setter Property="Margin" Value="0,-4,0,0" />
96-
</Style>
97-
</Flyout.FlyoutPresenterStyle>
98-
<Grid x:Name="FlyoutRootGrid">
99-
<Grid x:Name="FlyoutContentGrid" />
100-
</Grid>
101-
</Flyout>
102-
</FlyoutBase.AttachedFlyout>
103-
104-
<VisualStateManager.VisualStateGroups>
105-
<VisualStateGroup x:Name="ItemOnNavigationViewListPositionStates">
106-
<VisualState x:Name="OnLeftNavigation">
107-
<VisualState.Setters>
108-
<Setter Target="NavigationViewItemPresenter.Style" Value="{StaticResource MUX_NavigationViewItemPresenterStyleWhenOnLeftPane}" />
109-
</VisualState.Setters>
110-
</VisualState>
111-
<VisualState x:Name="OnLeftNavigationReveal">
112-
<VisualState.Setters>
113-
<Setter Target="NavigationViewItemPresenter.Style" Value="{StaticResource MUX_NavigationViewItemPresenterStyleWhenOnLeftPaneWithRevealFocus}" />
114-
</VisualState.Setters>
115-
</VisualState>
116-
<VisualState x:Name="OnTopNavigationPrimary">
117-
<VisualState.Setters>
118-
<Setter Target="NavigationViewItemPresenter.Style" Value="{StaticResource MUX_NavigationViewItemPresenterStyleWhenOnTopPane}" />
119-
<contract7NotPresent:Setter Target="ChildrenFlyout.Placement" Value="Bottom" />
120-
<contract7Present:Setter Target="ChildrenFlyout.Placement" Value="BottomEdgeAlignedLeft" />
121-
</VisualState.Setters>
122-
</VisualState>
123-
<VisualState x:Name="OnTopNavigationPrimaryReveal">
124-
<VisualState.Setters>
125-
<Setter Target="NavigationViewItemPresenter.Style" Value="{StaticResource MUX_NavigationViewItemPresenterStyleWhenOnTopPaneWithRevealFocus}" />
126-
<contract7NotPresent:Setter Target="ChildrenFlyout.Placement" Value="Bottom" />
127-
<contract7Present:Setter Target="ChildrenFlyout.Placement" Value="BottomEdgeAlignedLeft" />
128-
</VisualState.Setters>
129-
</VisualState>
130-
<VisualState x:Name="OnTopNavigationOverflow">
131-
<VisualState.Setters>
132-
<Setter Target="NavigationViewItemPresenter.Style" Value="{StaticResource MUX_NavigationViewItemPresenterStyleWhenOnTopPaneOverflow}" />
133-
</VisualState.Setters>
134-
</VisualState>
135-
</VisualStateGroup>
136-
137-
<VisualStateGroup x:Name="DragStates">
138-
<VisualState x:Name="DragEnter">
139-
<VisualState.Setters>
140-
<contract4Present:Setter Target="NVIRootGrid.(media:RevealBrush.State)" Value="PointerOver" />
141-
<Setter Target="NVIRootGrid.Background" Value="{ThemeResource NavigationViewItemBackgroundPointerOver}" />
142-
<Setter Target="NVIRootGrid.BorderBrush" Value="{ThemeResource NavigationViewItemBorderBrushPointerOver}" />
143-
<Setter Target="NavigationViewItemPresenter.Foreground" Value="{ThemeResource NavigationViewItemForegroundPointerOver}" />
144-
</VisualState.Setters>
145-
</VisualState>
146-
<VisualState x:Name="DragLeave" />
147-
<VisualState x:Name="Drop" />
148-
</VisualStateGroup>
149-
</VisualStateManager.VisualStateGroups>
150-
</Grid>
151-
</ControlTemplate>
152-
</Setter.Value>
153-
</Setter>
154-
</Style>
155-
15630
<DataTemplate x:Key="LocationNavItem" x:DataType="local2:LocationItem">
15731
<muxc:NavigationViewItem
15832
AllowDrop="True"
@@ -164,9 +38,7 @@
16438
DragOver="NavigationViewLocationItem_DragOver"
16539
Drop="NavigationViewLocationItem_Drop"
16640
IsRightTapEnabled="True"
167-
IsTabStop="False"
16841
RightTapped="NavigationViewLocationItem_RightTapped"
169-
Style="{StaticResource DefaultSidebarStyle}"
17042
Tag="{x:Bind Path}">
17143
<muxc:NavigationViewItem.Icon>
17244
<FontIcon
@@ -190,7 +62,6 @@
19062
Drop="NavigationViewDriveItem_Drop"
19163
IsRightTapEnabled="True"
19264
RightTapped="NavigationViewDriveItem_RightTapped"
193-
Style="{StaticResource DefaultSidebarStyle}"
19465
Tag="{x:Bind Path}"
19566
ToolTipService.ToolTip="{x:Bind SpaceText}"
19667
Visibility="{x:Bind ItemVisibility}">
@@ -211,8 +82,6 @@
21182
DataContext="{x:Bind}"
21283
DragEnter="NavigationViewItem_DragEnter"
21384
DragLeave="NavigationViewItem_DragLeave"
214-
IsTabStop="False"
215-
Style="{StaticResource DefaultSidebarStyle}"
21685
Tag="{x:Bind Path}">
21786
<muxc:NavigationViewItem.Icon>
21887
<BitmapIcon

Files/UserControls/YourHome.xaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
x:Class="Files.YourHome"
33
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
44
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
5-
xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
65
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
76
xmlns:local="using:Files"
87
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"

Files/Views/LayoutModes/GenericFileBrowser.xaml.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,9 @@ protected override void Page_CharacterReceived(CoreWindow sender, CharacterRecei
419419
{
420420
if (App.CurrentInstance.CurrentPageType == typeof(GenericFileBrowser))
421421
{
422+
// Don't block the various uses of enter key (key 13)
422423
var focusedElement = FocusManager.GetFocusedElement() as FrameworkElement;
423-
if (focusedElement is TextBox || focusedElement is PasswordBox ||
424+
if (args.KeyCode == 13 || focusedElement is Button || focusedElement is TextBox || focusedElement is PasswordBox ||
424425
Interacts.Interaction.FindParent<ContentDialog>(focusedElement) != null)
425426
{
426427
return;

Files/Views/LayoutModes/GridViewBrowser.xaml.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,9 @@ protected override void Page_CharacterReceived(CoreWindow sender, CharacterRecei
303303
{
304304
if (App.CurrentInstance.CurrentPageType == typeof(GridViewBrowser) && !isRenamingItem)
305305
{
306+
// Don't block the various uses of enter key (key 13)
306307
var focusedElement = FocusManager.GetFocusedElement() as FrameworkElement;
307-
if (focusedElement is TextBox || focusedElement is PasswordBox ||
308+
if (args.KeyCode == 13 || focusedElement is Button || focusedElement is TextBox || focusedElement is PasswordBox ||
308309
Interacts.Interaction.FindParent<ContentDialog>(focusedElement) != null)
309310
{
310311
return;

0 commit comments

Comments
 (0)