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;