Skip to content

Commit 6946ddb

Browse files
authored
Feature: Vertical NavigationView in the properties window (files-community#11427)
1 parent ef4b6e9 commit 6946ddb

18 files changed

+1938
-1593
lines changed

src/Files.App/App.xaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040

4141
<ResourceDictionary.MergedDictionaries>
4242
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
43+
<ResourceDictionary Source="/ResourceDictionaries/PathIcons.xaml" />
4344
<ResourceDictionary>
4445
<ResourceDictionary.ThemeDictionaries>
4546
<ResourceDictionary x:Key="Light">

src/Files.App/Helpers/FilePropertiesHelpers.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public static async Task OpenPropertiesWindowAsync(object item, IShellPage assoc
7070
IsMaximizable = false,
7171
MinWidth = 460,
7272
MinHeight = 550,
73-
Width = 550,
73+
Width = 600,
7474
Height = 550,
7575
Content = frame,
7676
Backdrop = new WinUIEx.MicaSystemBackdrop(),
@@ -85,7 +85,7 @@ public static async Task OpenPropertiesWindowAsync(object item, IShellPage assoc
8585
appWindow.SetIcon(LogoPath);
8686

8787
if (frame.Content is Properties properties)
88-
properties.appWindow = appWindow;
88+
properties.AppWindow = appWindow;
8989

9090
appWindow.Show();
9191

Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
<ResourceDictionary
2+
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3+
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4+
xmlns:primitives="using:Microsoft.UI.Xaml.Controls.Primitives">
5+
6+
<ResourceDictionary.ThemeDictionaries>
7+
<ResourceDictionary x:Key="Dark">
8+
<StaticResource x:Key="NavigationViewItemBackgroundPointerOver" ResourceKey="SubtleFillColorSecondaryBrush" />
9+
<StaticResource x:Key="NavigationViewItemBackgroundPressed" ResourceKey="SubtleFillColorTertiaryBrush" />
10+
<StaticResource x:Key="NavigationViewItemBackgroundSelected" ResourceKey="ControlFillColorDefaultBrush" />
11+
<StaticResource x:Key="NavigationViewItemBackgroundSelectedPointerOver" ResourceKey="ControlFillColorDefaultBrush" />
12+
<StaticResource x:Key="NavigationViewItemBackgroundSelectedPressed" ResourceKey="ControlFillColorDefaultBrush" />
13+
14+
<StaticResource x:Key="NavigationViewItemForeground" ResourceKey="TextFillColorSecondaryBrush" />
15+
<StaticResource x:Key="NavigationViewItemForegroundPointerOver" ResourceKey="TextFillColorPrimaryBrush" />
16+
<StaticResource x:Key="NavigationViewItemForegroundPressed" ResourceKey="TextFillColorPrimaryBrush" />
17+
<StaticResource x:Key="NavigationViewItemForegroundSelected" ResourceKey="TextFillColorSecondaryBrush" />
18+
<StaticResource x:Key="NavigationViewItemForegroundSelectedPointerOver" ResourceKey="TextFillColorSecondaryBrush" />
19+
<StaticResource x:Key="NavigationViewItemForegroundSelectedPressed" ResourceKey="TextFillColorSecondaryBrush" />
20+
</ResourceDictionary>
21+
22+
<ResourceDictionary x:Key="Light">
23+
<StaticResource x:Key="NavigationViewItemBackgroundPointerOver" ResourceKey="ControlFillColorSecondaryBrush" />
24+
<StaticResource x:Key="NavigationViewItemBackgroundPressed" ResourceKey="ControlFillColorTertiaryBrush" />
25+
<StaticResource x:Key="NavigationViewItemBackgroundSelected" ResourceKey="ControlFillColorDefaultBrush" />
26+
<StaticResource x:Key="NavigationViewItemBackgroundSelectedPointerOver" ResourceKey="ControlFillColorDefaultBrush" />
27+
<StaticResource x:Key="NavigationViewItemBackgroundSelectedPressed" ResourceKey="ControlFillColorDefaultBrush" />
28+
29+
<StaticResource x:Key="NavigationViewItemForeground" ResourceKey="TextFillColorSecondaryBrush" />
30+
<StaticResource x:Key="NavigationViewItemForegroundPointerOver" ResourceKey="TextFillColorPrimaryBrush" />
31+
<StaticResource x:Key="NavigationViewItemForegroundPressed" ResourceKey="TextFillColorPrimaryBrush" />
32+
<StaticResource x:Key="NavigationViewItemForegroundSelected" ResourceKey="TextFillColorSecondaryBrush" />
33+
<StaticResource x:Key="NavigationViewItemForegroundSelectedPointerOver" ResourceKey="TextFillColorSecondaryBrush" />
34+
<StaticResource x:Key="NavigationViewItemForegroundSelectedPressed" ResourceKey="TextFillColorSecondaryBrush" />
35+
</ResourceDictionary>
36+
37+
<ResourceDictionary x:Key="HighContrast">
38+
<StaticResource x:Key="NavigationViewItemBackgroundPointerOver" ResourceKey="SystemControlHighlightListLowBrush" />
39+
<StaticResource x:Key="NavigationViewItemBackgroundPressed" ResourceKey="SystemControlHighlightListMediumBrush" />
40+
<StaticResource x:Key="NavigationViewItemBackgroundSelected" ResourceKey="SystemControlHighlightListLowBrush" />
41+
<StaticResource x:Key="NavigationViewItemBackgroundSelectedPointerOver" ResourceKey="SystemControlHighlightListLowBrush" />
42+
<StaticResource x:Key="NavigationViewItemBackgroundSelectedPressed" ResourceKey="SystemControlHighlightListMediumBrush" />
43+
44+
<StaticResource x:Key="NavigationViewItemForeground" ResourceKey="SystemControlForegroundBaseHighBrush" />
45+
<StaticResource x:Key="NavigationViewItemForegroundPointerOver" ResourceKey="SystemControlHighlightAltBaseHighBrush" />
46+
<StaticResource x:Key="NavigationViewItemForegroundPressed" ResourceKey="SystemControlHighlightAltBaseHighBrush" />
47+
<StaticResource x:Key="NavigationViewItemForegroundSelected" ResourceKey="SystemControlHighlightAltBaseHighBrush" />
48+
<StaticResource x:Key="NavigationViewItemForegroundSelectedPointerOver" ResourceKey="SystemControlHighlightAltBaseHighBrush" />
49+
<StaticResource x:Key="NavigationViewItemForegroundSelectedPressed" ResourceKey="SystemControlHighlightAltBaseHighBrush" />
50+
</ResourceDictionary>
51+
</ResourceDictionary.ThemeDictionaries>
52+
53+
<x:Double x:Key="NavigationViewSelectionIndicatorWidth">4</x:Double>
54+
<x:Double x:Key="NavigationViewSelectionIndicatorHeight">26</x:Double>
55+
<x:Double x:Key="NavigationViewSelectionIndicatorRadius">2</x:Double>
56+
<Thickness x:Key="NavigationViewItemContentPresenterMargin">0,0,0,0</Thickness>
57+
58+
<Style x:Key="MUX_NavigationViewItemPresenterStyleWhenOnLeftPane" TargetType="primitives:NavigationViewItemPresenter">
59+
<Setter Property="Foreground" Value="{ThemeResource NavigationViewItemForeground}" />
60+
<Setter Property="Background" Value="{ThemeResource NavigationViewItemBackground}" />
61+
<Setter Property="BorderBrush" Value="{ThemeResource NavigationViewItemBorderBrush}" />
62+
<Setter Property="BorderThickness" Value="{StaticResource NavigationViewItemBorderThickness}" />
63+
<Setter Property="UseSystemFocusVisuals" Value="True" />
64+
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
65+
<Setter Property="CornerRadius" Value="{ThemeResource ControlCornerRadius}" />
66+
<Setter Property="Template">
67+
<Setter.Value>
68+
<ControlTemplate TargetType="primitives:NavigationViewItemPresenter">
69+
<Grid
70+
x:Name="LayoutRoot"
71+
MinHeight="{ThemeResource NavigationViewItemOnLeftMinHeight}"
72+
Margin="{ThemeResource NavigationViewItemButtonMargin}"
73+
Background="{TemplateBinding Background}"
74+
Control.IsTemplateFocusTarget="True"
75+
CornerRadius="{ThemeResource ControlCornerRadius}">
76+
<Grid.BackgroundTransition>
77+
<BrushTransition Duration="0:0:0.083" />
78+
</Grid.BackgroundTransition>
79+
80+
<!-- Selection indicator -->
81+
<Rectangle
82+
x:Name="SelectionIndicator"
83+
Width="{ThemeResource NavigationViewSelectionIndicatorWidth}"
84+
Height="{ThemeResource NavigationViewSelectionIndicatorHeight}"
85+
HorizontalAlignment="Left"
86+
VerticalAlignment="Center"
87+
Fill="{ThemeResource NavigationViewSelectionIndicatorForeground}"
88+
Opacity="0.0"
89+
RadiusX="{ThemeResource NavigationViewSelectionIndicatorRadius}"
90+
RadiusY="{ThemeResource NavigationViewSelectionIndicatorRadius}" />
91+
92+
<!-- Content grid -->
93+
<ContentPresenter
94+
x:Name="ContentPresenter"
95+
Grid.Column="1"
96+
MinHeight="{ThemeResource NavigationViewItemOnLeftMinHeight}"
97+
Margin="{ThemeResource NavigationViewItemContentPresenterMargin}"
98+
Padding="{TemplateBinding Padding}"
99+
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
100+
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
101+
AutomationProperties.AccessibilityView="Raw"
102+
Content="{TemplateBinding Content}"
103+
ContentTemplate="{TemplateBinding ContentTemplate}"
104+
ContentTemplateSelector="{TemplateBinding ContentTemplateSelector}"
105+
ContentTransitions="{TemplateBinding ContentTransitions}"
106+
Foreground="{TemplateBinding Foreground}" />
107+
108+
<VisualStateManager.VisualStateGroups>
109+
<VisualStateGroup x:Name="PointerStates">
110+
<VisualState x:Name="Normal" />
111+
<VisualState x:Name="PointerOver">
112+
<Storyboard>
113+
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" Storyboard.TargetProperty="Background">
114+
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource NavigationViewItemBackgroundPointerOver}" />
115+
</ObjectAnimationUsingKeyFrames>
116+
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
117+
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource NavigationViewItemForegroundPointerOver}" />
118+
</ObjectAnimationUsingKeyFrames>
119+
</Storyboard>
120+
</VisualState>
121+
<VisualState x:Name="Pressed">
122+
<Storyboard>
123+
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" Storyboard.TargetProperty="Background">
124+
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource NavigationViewItemBackgroundPressed}" />
125+
</ObjectAnimationUsingKeyFrames>
126+
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
127+
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource NavigationViewItemForegroundPressed}" />
128+
</ObjectAnimationUsingKeyFrames>
129+
</Storyboard>
130+
</VisualState>
131+
<VisualState x:Name="Selected">
132+
<Storyboard>
133+
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" Storyboard.TargetProperty="Background">
134+
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource NavigationViewItemBackgroundSelected}" />
135+
</ObjectAnimationUsingKeyFrames>
136+
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
137+
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource NavigationViewItemForegroundSelected}" />
138+
</ObjectAnimationUsingKeyFrames>
139+
</Storyboard>
140+
</VisualState>
141+
<VisualState x:Name="PointerOverSelected">
142+
<Storyboard>
143+
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" Storyboard.TargetProperty="Background">
144+
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource NavigationViewItemBackgroundSelectedPointerOver}" />
145+
</ObjectAnimationUsingKeyFrames>
146+
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
147+
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource NavigationViewItemForegroundSelectedPointerOver}" />
148+
</ObjectAnimationUsingKeyFrames>
149+
</Storyboard>
150+
</VisualState>
151+
<VisualState x:Name="PressedSelected">
152+
<Storyboard>
153+
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="LayoutRoot" Storyboard.TargetProperty="Background">
154+
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource NavigationViewItemBackgroundSelectedPressed}" />
155+
</ObjectAnimationUsingKeyFrames>
156+
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
157+
<DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource NavigationViewItemForegroundSelectedPressed}" />
158+
</ObjectAnimationUsingKeyFrames>
159+
</Storyboard>
160+
</VisualState>
161+
</VisualStateGroup>
162+
163+
<VisualStateGroup x:Name="DisabledStates">
164+
<VisualState x:Name="Enabled" />
165+
<VisualState x:Name="Disabled">
166+
<VisualState.Setters>
167+
<Setter Target="LayoutRoot.Opacity" Value="{ThemeResource ListViewItemDisabledThemeOpacity}" />
168+
</VisualState.Setters>
169+
</VisualState>
170+
</VisualStateGroup>
171+
</VisualStateManager.VisualStateGroups>
172+
</Grid>
173+
</ControlTemplate>
174+
</Setter.Value>
175+
</Setter>
176+
</Style>
177+
178+
</ResourceDictionary>

0 commit comments

Comments
 (0)