From 8ead180b742df6025730d50d001bd224224dee2f Mon Sep 17 00:00:00 2001 From: aurelm-w Date: Fri, 5 Jun 2026 10:52:26 +0200 Subject: [PATCH 1/2] Refactored code, added sticky bar logic, and fixed UserElevation crash --- WpfApp.sln | 4 +- WpfApp/Abstractions/IStickyHeaderSupport.cs | 8 ++ WpfApp/Domain/MainWindowViewModel.cs | 12 +- WpfApp/Domain/NavItem.cs | 18 +-- WpfApp/Domain/StickyHeaderSupportBase.cs | 11 ++ WpfApp/LeosacWinAppInfo.cs | 16 +-- WpfApp/MainWindow.xaml | 117 ++++++++++++-------- WpfApp/MainWindow.xaml.cs | 7 +- WpfApp/SnackbarHelper.cs | 4 +- WpfApp/UserAppSettings.cs | 7 +- WpfApp/UserElevationHelper.cs | 49 ++++++-- 11 files changed, 161 insertions(+), 92 deletions(-) create mode 100644 WpfApp/Abstractions/IStickyHeaderSupport.cs create mode 100644 WpfApp/Domain/StickyHeaderSupportBase.cs diff --git a/WpfApp.sln b/WpfApp.sln index 3caff2d..0fe5b33 100644 --- a/WpfApp.sln +++ b/WpfApp.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.5.33516.290 +# Visual Studio Version 18 +VisualStudioVersion = 18.4.11626.88 stable MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WpfApp", "WpfApp\WpfApp.csproj", "{E29065B9-9FFC-4D05-8B0B-FB1B8EB440A4}" EndProject diff --git a/WpfApp/Abstractions/IStickyHeaderSupport.cs b/WpfApp/Abstractions/IStickyHeaderSupport.cs new file mode 100644 index 0000000..b9fc630 --- /dev/null +++ b/WpfApp/Abstractions/IStickyHeaderSupport.cs @@ -0,0 +1,8 @@ +namespace Leosac.WpfApp.Abstractions +{ + public interface IStickyHeaderSupport + { + bool SupportsStickyHeader { get; } + bool IsStickyHeaderVisible { get; } + } +} \ No newline at end of file diff --git a/WpfApp/Domain/MainWindowViewModel.cs b/WpfApp/Domain/MainWindowViewModel.cs index 5a23b44..9b6f933 100644 --- a/WpfApp/Domain/MainWindowViewModel.cs +++ b/WpfApp/Domain/MainWindowViewModel.cs @@ -1,13 +1,11 @@ -using MaterialDesignThemes.Wpf; +using CommunityToolkit.Mvvm.ComponentModel; +using CommunityToolkit.Mvvm.Input; +using Leosac.SharedServices; +using MaterialDesignThemes.Wpf; using System; using System.Collections.ObjectModel; -using System.ComponentModel; -using System.Windows.Controls; -using System.Windows.Data; using System.Windows; -using CommunityToolkit.Mvvm.ComponentModel; -using CommunityToolkit.Mvvm.Input; -using Leosac.SharedServices; +using System.Windows.Controls; namespace Leosac.WpfApp.Domain { diff --git a/WpfApp/Domain/NavItem.cs b/WpfApp/Domain/NavItem.cs index efa8454..c72311a 100644 --- a/WpfApp/Domain/NavItem.cs +++ b/WpfApp/Domain/NavItem.cs @@ -1,7 +1,8 @@ -using System; -using System.Windows.Controls; +using CommunityToolkit.Mvvm.ComponentModel; +using Leosac.WpfApp.Abstractions; +using System; using System.Windows; -using CommunityToolkit.Mvvm.ComponentModel; +using System.Windows.Controls; namespace Leosac.WpfApp.Domain { @@ -23,6 +24,7 @@ public NavItem(string name, Type contentType, string icon, object? dataContext) _contentType = contentType; Icon = icon; _dataContext = dataContext; + _stickyHeaderSupport = dataContext as IStickyHeaderSupport; } public string Name { get; } @@ -31,10 +33,12 @@ public NavItem(string name, Type contentType, string icon, object? dataContext) public object? Content => _content ??= CreateContent(); - public object? DataContext - { - get => _dataContext; - } + public object? DataContext => _dataContext; + + private readonly IStickyHeaderSupport? _stickyHeaderSupport; + public IStickyHeaderSupport? StickyHeaderSupport => _stickyHeaderSupport; + + public object? StickyHeader { get; set; } public ScrollBarVisibility HorizontalScrollBarVisibilityRequirement { diff --git a/WpfApp/Domain/StickyHeaderSupportBase.cs b/WpfApp/Domain/StickyHeaderSupportBase.cs new file mode 100644 index 0000000..4bfdf6f --- /dev/null +++ b/WpfApp/Domain/StickyHeaderSupportBase.cs @@ -0,0 +1,11 @@ +using Leosac.WpfApp.Abstractions; +using CommunityToolkit.Mvvm.ComponentModel; + +namespace Leosac.WpfApp.Domain +{ + public abstract class StickyHeaderSupportBase : ObservableObject, IStickyHeaderSupport + { + public virtual bool SupportsStickyHeader => false; + public virtual bool IsStickyHeaderVisible => false; + } +} \ No newline at end of file diff --git a/WpfApp/LeosacWinAppInfo.cs b/WpfApp/LeosacWinAppInfo.cs index acd21dc..d300355 100644 --- a/WpfApp/LeosacWinAppInfo.cs +++ b/WpfApp/LeosacWinAppInfo.cs @@ -6,20 +6,20 @@ namespace Leosac.WpfApp { public abstract class LeosacWinAppInfo : LeosacAppInfo { - public static LeosacWinAppInfo? WinInstance - { - get => Instance as LeosacWinAppInfo; - } + private const string DefaultApplicationLogoPath = "/WpfApp;component/images/leosac.png"; + + public static LeosacWinAppInfo? WinInstance => Instance as LeosacWinAppInfo; + + public string ApplicationLogo { get; protected set; } + + public RelayCommand? SettingsCommand { get; protected set; } protected LeosacWinAppInfo() { - ApplicationLogo = "/WpfApp;component/images/leosac.png"; + ApplicationLogo = DefaultApplicationLogoPath; SettingsCommand = null; } - public string ApplicationLogo { get; protected set; } - - public RelayCommand? SettingsCommand { get; protected set; } public abstract void InitializeMainWindow(MainWindowViewModel model); diff --git a/WpfApp/MainWindow.xaml b/WpfApp/MainWindow.xaml index a77b60e..773f448 100644 --- a/WpfApp/MainWindow.xaml +++ b/WpfApp/MainWindow.xaml @@ -15,8 +15,8 @@ TextElement.Foreground="{DynamicResource MaterialDesign.Brush.Foreground}" TextElement.FontWeight="Regular" TextElement.FontSize="13" - TextOptions.TextFormattingMode="Ideal" - TextOptions.TextRenderingMode="Auto" + TextOptions.TextFormattingMode="Ideal" + TextOptions.TextRenderingMode="Auto" Background="{DynamicResource MaterialDesign.Brush.Background}" FontFamily="{DynamicResource MaterialDesignFont}" Loaded="Window_Loaded"> @@ -72,34 +72,42 @@ - - - - - + + - - - + materialDesign:ElevationAssist.Elevation="Dp4" + DockPanel.Dock="Top" + Mode="PrimaryMid"> + + + + + + + + AutomationProperties.Name="HamburgerToggleButton" + IsChecked="False" + Style="{StaticResource MaterialDesignHamburgerToggleButton}" /> + - - + + @@ -108,12 +116,16 @@ - - - - - - + + + + + + @@ -123,18 +135,8 @@