diff --git a/src/Files.App.Controls/BladeView/BladeItem.cs b/src/Files.App.Controls/BladeView/BladeItem.cs
index a96dd33afeb4..ab3df482a544 100644
--- a/src/Files.App.Controls/BladeView/BladeItem.cs
+++ b/src/Files.App.Controls/BladeView/BladeItem.cs
@@ -17,7 +17,7 @@ namespace Files.App.Controls
public partial class BladeItem : ContentControl
{
private const double MINIMUM_WIDTH = 150;
- private const double DEFAULT_WIDTH = 300; // Default width for the blade item
+ private const double DEFAULT_WIDTH = 200; // Default width for the blade item
private Button _closeButton;
private Border _bladeResizer;
@@ -113,6 +113,12 @@ private void BladeResizer_ManipulationCompleted(object sender, ManipulationCompl
}
private void BladeResizer_DoubleTapped(object sender, DoubleTappedRoutedEventArgs e)
+ {
+ SetWidth();
+ e.Handled = true;
+ }
+
+ public void SetWidth()
{
var optimalWidth = CalculateOptimalWidth();
if (optimalWidth > 0)
@@ -124,8 +130,6 @@ private void BladeResizer_DoubleTapped(object sender, DoubleTappedRoutedEventArg
// Fallback to default width if calculation fails
Width = DEFAULT_WIDTH;
}
-
- e.Handled = true;
}
private double CalculateOptimalWidth()
@@ -201,7 +205,7 @@ private double MeasureContentWidth(ListView listView)
catch (Exception)
{
// Fallback calculation
- return 200; // Default reasonable width
+ return DEFAULT_WIDTH; // Default reasonable width
}
}
diff --git a/src/Files.App.Controls/BladeView/BladeView.xaml b/src/Files.App.Controls/BladeView/BladeView.xaml
index 98ebd4d629be..3d223df0ca5a 100644
--- a/src/Files.App.Controls/BladeView/BladeView.xaml
+++ b/src/Files.App.Controls/BladeView/BladeView.xaml
@@ -21,16 +21,11 @@
-
+
-
-
-
-
-
-
+
@@ -96,12 +91,10 @@
-
-
diff --git a/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs
index 90f0911877d6..71090606b7e1 100644
--- a/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs
+++ b/src/Files.App/Views/Layouts/ColumnLayoutPage.xaml.cs
@@ -80,9 +80,20 @@ public ColumnLayoutPage() : base()
// Methods
+ private void OnItemLoadStatusChanged(object sender, ItemLoadStatusChangedEventArgs args)
+ {
+ if (args.Status is ItemLoadStatusChangedEventArgs.ItemLoadStatus.Complete)
+ {
+ var currentBladeIndex = (ParentShellPageInstance is ColumnShellPage associatedColumnShellPage) ? associatedColumnShellPage.ColumnParams?.Column ?? 0 : 0;
+ this.FindAscendant()?.SetWidth(currentBladeIndex);
+ }
+ }
+
+
private void FileList_Loaded(object sender, RoutedEventArgs e)
{
ContentScroller = FileList.FindDescendant(x => x.Name == "ScrollViewer");
+ ParentShellPageInstance.ShellViewModel.ItemLoadStatusChanged += OnItemLoadStatusChanged;
}
private void ColumnViewBase_GotFocus(object sender, RoutedEventArgs e)
@@ -186,6 +197,7 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
base.OnNavigatingFrom(e);
UserSettingsService.LayoutSettingsService.PropertyChanged -= LayoutSettingsService_PropertyChanged;
+ ParentShellPageInstance.ShellViewModel.ItemLoadStatusChanged -= OnItemLoadStatusChanged;
}
private void LayoutSettingsService_PropertyChanged(object? sender, PropertyChangedEventArgs e)
diff --git a/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml b/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml
index a73be4b60036..75cfee8be929 100644
--- a/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml
+++ b/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml
@@ -24,7 +24,7 @@
-
+
diff --git a/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml.cs b/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml.cs
index eac0f3da62f3..426156abcd6c 100644
--- a/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml.cs
+++ b/src/Files.App/Views/Layouts/ColumnsLayoutPage.xaml.cs
@@ -81,6 +81,12 @@ private void ColumnViewBase_ItemInvoked(object? sender, EventArgs e)
}
}
+ public void SetWidth(int index)
+ {
+ var blade = ColumnHost.ActiveBlades[index];
+ blade?.SetWidth();
+ }
+
private void ContentChanged(IShellPage p)
{
(ParentShellPageInstance as ModernShellPage)?.RaiseContentChanged(p, p.TabBarItemParameter);
diff --git a/src/Files.App/Views/Shells/ColumnShellPage.xaml b/src/Files.App/Views/Shells/ColumnShellPage.xaml
index 3434b32878f4..10f7f2469c89 100644
--- a/src/Files.App/Views/Shells/ColumnShellPage.xaml
+++ b/src/Files.App/Views/Shells/ColumnShellPage.xaml
@@ -10,6 +10,7 @@
x:Name="RootPage"
KeyboardAcceleratorPlacementMode="Hidden"
Loaded="Page_Loaded"
+ Unloaded="Page_Unloaded"
mc:Ignorable="d">
diff --git a/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs b/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs
index fa941ac4b5d9..07fe891ea88c 100644
--- a/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs
+++ b/src/Files.App/Views/Shells/ColumnShellPage.xaml.cs
@@ -93,6 +93,16 @@ protected override void Page_Loaded(object sender, RoutedEventArgs e)
NotifyPropertyChanged(nameof(ShellViewModel));
}
+ private void Page_Unloaded(object sender, RoutedEventArgs e)
+ {
+ ShellViewModel.WorkingDirectoryModified -= ViewModel_WorkingDirectoryModified;
+ ShellViewModel.ItemLoadStatusChanged -= FilesystemViewModel_ItemLoadStatusChanged;
+ ShellViewModel.DirectoryInfoUpdated -= FilesystemViewModel_DirectoryInfoUpdated;
+ ShellViewModel.PageTypeUpdated -= FilesystemViewModel_PageTypeUpdated;
+ ShellViewModel.OnSelectionRequestedEvent -= FilesystemViewModel_OnSelectionRequestedEvent;
+ ShellViewModel.GitDirectoryUpdated -= FilesystemViewModel_GitDirectoryUpdated;
+ }
+
protected override async void ViewModel_WorkingDirectoryModified(object sender, WorkingDirectoryModifiedEventArgs e)
{
string value = e.Path;