Skip to content

Commit c9e742f

Browse files
committed
Make GenericFileBrowser ContextMenu more predictable
1 parent 043b58b commit c9e742f

File tree

2 files changed

+141
-81
lines changed

2 files changed

+141
-81
lines changed

Files UWP/GenericFileBrowser.xaml

Lines changed: 125 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,15 @@
44
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
55
xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
66
xmlns:uilib="using:Microsoft.UI.Xaml.Controls"
7+
xmlns:controlsprimitives="using:Microsoft.Toolkit.Uwp.UI.Controls.Primitives"
78
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
89
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
910
xmlns:local="using:Files"
1011
xmlns:local1="using:Files.Navigation"
1112
xmlns:local2="using:Files.Filesystem"
1213
xmlns:local3="using:Files.Interacts"
1314
Name="GenericItemView"
14-
mc:Ignorable="d" PointerReleased="GenericItemView_PointerReleased">
15+
mc:Ignorable="d" IsRightTapEnabled="True" RightTapped="GenericItemView_RightTapped" PointerReleased="GenericItemView_PointerReleased">
1516
<Page.Resources>
1617
<Style x:Key="TextBoxStyleForPathBar" TargetType="TextBox">
1718
<Setter Property="Foreground" Value="{ThemeResource DefaultTextForegroundThemeBrush}"/>
@@ -176,8 +177,36 @@
176177
</Setter.Value>
177178
</Setter>
178179
</Style>
180+
179181
</Page.Resources>
182+
<Page.ContextFlyout>
183+
<MenuFlyout x:Name="EmptySpaceFlyout">
184+
<MenuFlyout.Items>
185+
<MenuFlyoutItem Text="Refresh" Name="RefreshEmptySpace">
186+
<MenuFlyoutItem.Icon>
187+
<FontIcon Glyph="&#xE72C;"/>
188+
</MenuFlyoutItem.Icon>
189+
</MenuFlyoutItem>
190+
<MenuFlyoutItem Text="Paste" Name="PasteEmptySpace" IsEnabled="{x:Bind local3:Interaction.PS.isEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
191+
<MenuFlyoutItem.Icon>
192+
<FontIcon Glyph="&#xE77F;"/>
193+
</MenuFlyoutItem.Icon>
194+
</MenuFlyoutItem>
195+
<MenuFlyoutItem Text="Open in PowerShell...">
196+
<MenuFlyoutItem.Icon>
197+
<FontIcon Glyph="&#xE756;"/>
198+
</MenuFlyoutItem.Icon>
199+
</MenuFlyoutItem>
200+
<MenuFlyoutSeparator/>
201+
<MenuFlyoutItem Text="Properties">
202+
<MenuFlyoutItem.Icon>
203+
<FontIcon Glyph="&#xE946;"/>
204+
</MenuFlyoutItem.Icon>
205+
</MenuFlyoutItem>
180206

207+
</MenuFlyout.Items>
208+
</MenuFlyout>
209+
</Page.ContextFlyout>
181210
<Grid>
182211
<Grid Tag="{x:Bind Tag, Mode=OneWay}" Background="{StaticResource ApplicationPageBackgroundThemeBrush}" Padding="0,0,0,0" VerticalAlignment="Stretch">
183212
<Grid.RowDefinitions>
@@ -195,7 +224,9 @@
195224
<AppBarButton.Icon>
196225
<FontIcon Glyph="&#xE76B;" FontFamily="Segoe MDL2 Assets"/>
197226
</AppBarButton.Icon>
198-
227+
<AppBarButton.KeyboardAccelerators>
228+
<KeyboardAccelerator Modifiers="Control" Key="Left"/>
229+
</AppBarButton.KeyboardAccelerators>
199230
</AppBarButton>
200231

201232
<AppBarButton LabelPosition="Collapsed" IsEnabled="{x:Bind local2:ItemViewModel.FS.isEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" x:Name="Forward">
@@ -204,6 +235,9 @@
204235
<FontIcon Glyph="&#xE76C;" FontFamily="Segoe MDL2 Assets"/>
205236

206237
</AppBarButton.Icon>
238+
<AppBarButton.KeyboardAccelerators>
239+
<KeyboardAccelerator Modifiers="Control" Key="Right"/>
240+
</AppBarButton.KeyboardAccelerators>
207241
</AppBarButton>
208242

209243

@@ -260,87 +294,99 @@
260294

261295

262296

263-
<controls:DataGrid SelectionChanged="AllView_SelectionChanged" Margin="24,0,0,0" Grid.Row="3" CellEditEnded="AllView_CellEditEnded" FocusVisualPrimaryThickness="0" SelectionMode="Extended" IsDoubleTapEnabled="True" x:FieldModifier="public" x:Name="AllView" Drop="AllView_DropAsync" AutoGenerateColumns="False" CanDrag="False" AllowDrop="True" DragOver="AllView_DragOver" IsRightTapEnabled="True" CanUserReorderColumns="False" IsReadOnly="True" ItemsSource="{x:Bind local2:ItemViewModel.FilesAndFolders}" HorizontalAlignment="Left">
264-
265-
<controls:DataGrid.Resources>
266-
<MenuFlyout x:Name="HeaderRightClickMenu" x:Key="HeaderRightClickFlyout">
267-
<MenuFlyoutItem Text="Edit Columns" Name="EditColumn">
268-
<MenuFlyoutItem.Icon>
269-
<FontIcon Glyph="&#xE70F;"/>
270-
</MenuFlyoutItem.Icon>
271-
</MenuFlyoutItem>
272-
<MenuFlyoutItem Text="Size All Columns to Fit" Name="FitColumns">
273-
<MenuFlyoutItem.Icon>
274-
<FontIcon Glyph="&#xE9A6;"/>
275-
</MenuFlyoutItem.Icon>
276-
</MenuFlyoutItem>
277-
</MenuFlyout>
278-
279-
<MenuFlyout x:Name="RightClickContextMenu" x:Key="RightClickFlyout">
280-
<MenuFlyout.Items>
281-
<MenuFlyoutItem Text="Open With..." Name="OpenItem">
282-
<MenuFlyoutItem.Icon>
283-
<FontIcon Glyph="&#xE7AC;"/>
284-
</MenuFlyoutItem.Icon>
285-
</MenuFlyoutItem>
297+
<controls:DataGrid ContextRequested="AllView_ContextRequested" SelectionChanged="AllView_SelectionChanged" Margin="24,0,0,0" Grid.Row="3" CellEditEnded="AllView_CellEditEnded" FocusVisualPrimaryThickness="0" SelectionMode="Extended" IsDoubleTapEnabled="True" x:FieldModifier="public" x:Name="AllView" Drop="AllView_DropAsync" AutoGenerateColumns="False" CanDrag="False" AllowDrop="True" DragOver="AllView_DragOver" IsRightTapEnabled="True" CanUserReorderColumns="False" IsReadOnly="True" ItemsSource="{x:Bind local2:ItemViewModel.FilesAndFolders}" HorizontalAlignment="Left">
298+
299+
<controls:DataGrid.ColumnHeaderStyle>
300+
<Style TargetType="controlsprimitives:DataGridColumnHeader">
301+
<Setter Property="ContextFlyout">
302+
<Setter.Value>
303+
<MenuFlyout x:Name="HeaderRightClickMenu">
304+
<MenuFlyoutItem Text="Edit Columns" Name="EditColumn">
305+
<MenuFlyoutItem.Icon>
306+
<FontIcon Glyph="&#xE70F;"/>
307+
</MenuFlyoutItem.Icon>
308+
</MenuFlyoutItem>
309+
<MenuFlyoutItem Text="Size All Columns to Fit" Name="FitColumns">
310+
<MenuFlyoutItem.Icon>
311+
<FontIcon Glyph="&#xE9A6;"/>
312+
</MenuFlyoutItem.Icon>
313+
</MenuFlyoutItem>
314+
</MenuFlyout>
315+
</Setter.Value>
316+
</Setter>
317+
</Style>
318+
</controls:DataGrid.ColumnHeaderStyle>
319+
<controls:DataGrid.RowStyle>
320+
<Style TargetType="controls:DataGridRow">
321+
<Setter Property="ContextFlyout">
322+
<Setter.Value>
323+
<MenuFlyout x:Name="RightClickContextMenu">
324+
<MenuFlyout.Items>
325+
<MenuFlyoutItem Text="Open With..." Name="OpenItem">
326+
<MenuFlyoutItem.Icon>
327+
<FontIcon Glyph="&#xE7AC;"/>
328+
</MenuFlyoutItem.Icon>
329+
</MenuFlyoutItem>
286330

287-
<MenuFlyoutItem Text="Share" Name="ShareItem">
288-
<MenuFlyoutItem.Icon>
289-
<FontIcon Glyph="&#xE72D;"/>
290-
</MenuFlyoutItem.Icon>
291-
<MenuFlyoutItem.KeyboardAccelerators>
292-
<KeyboardAccelerator Modifiers="Control" Key="S"/>
293-
</MenuFlyoutItem.KeyboardAccelerators>
294-
</MenuFlyoutItem>
331+
<MenuFlyoutItem Text="Share" Name="ShareItem">
332+
<MenuFlyoutItem.Icon>
333+
<FontIcon Glyph="&#xE72D;"/>
334+
</MenuFlyoutItem.Icon>
335+
<MenuFlyoutItem.KeyboardAccelerators>
336+
<KeyboardAccelerator Modifiers="Control" Key="S"/>
337+
</MenuFlyoutItem.KeyboardAccelerators>
338+
</MenuFlyoutItem>
295339

296-
<MenuFlyoutSeparator/>
297-
<MenuFlyoutItem Text="Delete" Name="DeleteItem" >
298-
<MenuFlyoutItem.Icon>
299-
<FontIcon Glyph="&#xE74D;"/>
300-
</MenuFlyoutItem.Icon>
301-
<MenuFlyoutItem.KeyboardAccelerators>
302-
<KeyboardAccelerator Key="Delete"/>
303-
</MenuFlyoutItem.KeyboardAccelerators>
304-
</MenuFlyoutItem>
305-
<MenuFlyoutItem Text="Rename" Name="RenameItem" >
306-
<MenuFlyoutItem.Icon>
307-
<FontIcon Glyph="&#xE8AC;"/>
308-
</MenuFlyoutItem.Icon>
309-
<MenuFlyoutItem.KeyboardAccelerators>
310-
<KeyboardAccelerator Key="F2"/>
311-
</MenuFlyoutItem.KeyboardAccelerators>
312-
</MenuFlyoutItem>
313-
<MenuFlyoutSeparator/>
314-
<MenuFlyoutItem Text="Cut" Name="CutItem" >
315-
<MenuFlyoutItem.Icon>
316-
<FontIcon Glyph="&#xE8C6;"/>
317-
</MenuFlyoutItem.Icon>
318-
<MenuFlyoutItem.KeyboardAccelerators>
319-
<KeyboardAccelerator Modifiers="Control" Key="X"/>
320-
</MenuFlyoutItem.KeyboardAccelerators>
321-
</MenuFlyoutItem>
322-
<MenuFlyoutItem Text="Copy" Name="CopyItem" >
323-
<MenuFlyoutItem.Icon>
324-
<FontIcon Glyph="&#xE8C8;"/>
325-
</MenuFlyoutItem.Icon>
326-
<MenuFlyoutItem.KeyboardAccelerators>
327-
<KeyboardAccelerator Modifiers="Control" Key="C"/>
328-
</MenuFlyoutItem.KeyboardAccelerators>
329-
</MenuFlyoutItem>
340+
<MenuFlyoutSeparator/>
341+
<MenuFlyoutItem Text="Delete" Name="DeleteItem" >
342+
<MenuFlyoutItem.Icon>
343+
<FontIcon Glyph="&#xE74D;"/>
344+
</MenuFlyoutItem.Icon>
345+
<MenuFlyoutItem.KeyboardAccelerators>
346+
<KeyboardAccelerator Key="Delete"/>
347+
</MenuFlyoutItem.KeyboardAccelerators>
348+
</MenuFlyoutItem>
349+
<MenuFlyoutItem Text="Rename" Name="RenameItem" >
350+
<MenuFlyoutItem.Icon>
351+
<FontIcon Glyph="&#xE8AC;"/>
352+
</MenuFlyoutItem.Icon>
353+
<MenuFlyoutItem.KeyboardAccelerators>
354+
<KeyboardAccelerator Key="F2"/>
355+
</MenuFlyoutItem.KeyboardAccelerators>
356+
</MenuFlyoutItem>
357+
<MenuFlyoutSeparator/>
358+
<MenuFlyoutItem Text="Cut" Name="CutItem" >
359+
<MenuFlyoutItem.Icon>
360+
<FontIcon Glyph="&#xE8C6;"/>
361+
</MenuFlyoutItem.Icon>
362+
<MenuFlyoutItem.KeyboardAccelerators>
363+
<KeyboardAccelerator Modifiers="Control" Key="X"/>
364+
</MenuFlyoutItem.KeyboardAccelerators>
365+
</MenuFlyoutItem>
366+
<MenuFlyoutItem Text="Copy" Name="CopyItem" >
367+
<MenuFlyoutItem.Icon>
368+
<FontIcon Glyph="&#xE8C8;"/>
369+
</MenuFlyoutItem.Icon>
370+
<MenuFlyoutItem.KeyboardAccelerators>
371+
<KeyboardAccelerator Modifiers="Control" Key="C"/>
372+
</MenuFlyoutItem.KeyboardAccelerators>
373+
</MenuFlyoutItem>
330374

331-
<MenuFlyoutSeparator/>
332-
<MenuFlyoutItem Text="Properties" Name="PropertiesItem">
333-
<MenuFlyoutItem.Icon>
334-
<FontIcon Glyph="&#xE946;"/>
335-
</MenuFlyoutItem.Icon>
336-
337-
</MenuFlyoutItem>
338-
</MenuFlyout.Items>
375+
<MenuFlyoutSeparator/>
376+
<MenuFlyoutItem Text="Properties" Name="PropertiesItem">
377+
<MenuFlyoutItem.Icon>
378+
<FontIcon Glyph="&#xE946;"/>
379+
</MenuFlyoutItem.Icon>
339380

340-
</MenuFlyout>
341-
</controls:DataGrid.Resources>
381+
</MenuFlyoutItem>
382+
</MenuFlyout.Items>
342383

343-
<controls:DataGrid.CellStyle>
384+
</MenuFlyout>
385+
</Setter.Value>
386+
</Setter>
387+
</Style>
388+
</controls:DataGrid.RowStyle>
389+
<controls:DataGrid.CellStyle>
344390
<Style TargetType="controls:DataGridCell">
345391
<Setter Property="BorderThickness" Value="0"/>
346392
<Setter Property="FocusVisualPrimaryThickness" Value="0"/>
@@ -352,7 +398,7 @@
352398
<controls:DataGridTemplateColumn IsReadOnly="True">
353399
<controls:DataGridTemplateColumn.CellTemplate>
354400
<DataTemplate>
355-
<Grid Margin="15, 0, 0, 0">
401+
<Grid Margin="15, 0, 0, 0">
356402
<FontIcon Visibility="{Binding FolderImg}" Glyph="&#xE8D5;" FontFamily="Segoe MDL2 Assets" Foreground="#ffe793"/>
357403
<FontIcon Visibility="{Binding EmptyImgVis}" Glyph="&#xE7C3;" FontFamily="Segoe MDL2 Assets"/>
358404
<Image Visibility="{Binding FileIconVis}" Height="20" Width="20" Source="{Binding FileImg}" Stretch="UniformToFill" />

Files UWP/GenericFileBrowser.xaml.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
using Windows.UI.Xaml.Input;
2121
using Windows.UI.Popups;
2222
using System.IO;
23+
using Windows.UI.Xaml.Controls.Primitives;
2324

2425
namespace Files
2526
{
@@ -29,6 +30,7 @@ public sealed partial class GenericFileBrowser : Page
2930
public TextBlock textBlock;
3031
public static DataGrid data;
3132
public static MenuFlyout context;
33+
public static MenuFlyout emptySpaceContext;
3234
public static MenuFlyout HeaderContextMenu;
3335
public static Page GFBPageName;
3436
public static ContentDialog collisionBox;
@@ -67,6 +69,10 @@ public GenericFileBrowser()
6769
AddItemBox = AddDialog;
6870
NameBox = NameDialog;
6971
inputFromRename = RenameInput;
72+
emptySpaceContext = EmptySpaceFlyout;
73+
RefreshEmptySpace.Click += NavigationActions.Refresh_Click;
74+
PasteEmptySpace.Click += Interaction.PasteItem_ClickAsync;
75+
7076
}
7177

7278

@@ -208,7 +214,6 @@ protected override void OnNavigatedTo(NavigationEventArgs eventArgs)
208214
{
209215
foreach (Microsoft.UI.Xaml.Controls.NavigationViewItemBase NavItemChoice in MainPage.nv.MenuItems)
210216
{
211-
Debug.WriteLine(parameters.Split("\\")[0]);
212217
if (NavItemChoice is Microsoft.UI.Xaml.Controls.NavigationViewItem && NavItemChoice.Tag.ToString().Contains(parameters.Split("\\")[0]))
213218
{
214219
MainPage.Select.itemSelected = NavItemChoice;
@@ -291,7 +296,6 @@ private void ContentDialog_Loaded(object sender, RoutedEventArgs e)
291296

292297
private void GenericItemView_PointerReleased(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)
293298
{
294-
data.CommitEdit();
295299
data.SelectedItems.Clear();
296300
}
297301

@@ -458,6 +462,16 @@ private async void VisiblePath_TextChanged(object sender, KeyRoutedEventArgs e)
458462
}
459463

460464
}
465+
466+
private void GenericItemView_RightTapped(object sender, RightTappedRoutedEventArgs e)
467+
{
468+
GFBPageName.ContextFlyout.ShowAt(GFBPageName);
469+
}
470+
471+
private void AllView_ContextRequested(UIElement sender, ContextRequestedEventArgs args)
472+
{
473+
474+
}
461475
}
462476

463477
public class EmptyFolderTextState : INotifyPropertyChanged

0 commit comments

Comments
 (0)