diff --git a/src/AvaloniaInside.Shell/NavigationBar.cs b/src/AvaloniaInside.Shell/NavigationBar.cs index c11b325..3c6f9b7 100644 --- a/src/AvaloniaInside.Shell/NavigationBar.cs +++ b/src/AvaloniaInside.Shell/NavigationBar.cs @@ -140,7 +140,7 @@ public static void SetHeader(AvaloniaObject element, object parameter) => #endregion - #region Hide + #region Visible public static readonly AttachedProperty VisibleProperty = AvaloniaProperty.RegisterAttached("Visible", defaultValue: true); @@ -240,10 +240,10 @@ protected virtual void UpdateItems(object view, ContentControl itemPresenter) if (itemPresenter.Content is StyledElement elementContent) elementContent.DataContext = element.DataContext ?? element; - + return; - } - + } + itemPresenter.Content = view; } diff --git a/src/AvaloniaInside.Shell/ShellView.SideMenu.cs b/src/AvaloniaInside.Shell/ShellView.SideMenu.cs index 3f6e138..c9be5c8 100644 --- a/src/AvaloniaInside.Shell/ShellView.SideMenu.cs +++ b/src/AvaloniaInside.Shell/ShellView.SideMenu.cs @@ -20,7 +20,6 @@ public partial class ShellView public double SideMenuSize => ScreenSize == ScreenSizeType.Small ? DesiredSize.Width - 35 : DefaultSideMenuSize; - public static readonly StyledProperty DefaultSideMenuSizeProperty = AvaloniaProperty.Register(nameof(DefaultSideMenuSize), 250); public double DefaultSideMenuSize @@ -233,6 +232,24 @@ public SideMenuItem? SideMenuSelectedItem #endregion + #region Attached properties + + #region OverrideSideMenuBehave + + public static readonly AttachedProperty OverrideSideMenuBehaveProperty = + AvaloniaProperty.RegisterAttached("OverrideSideMenuBehave", + defaultValue: null); + + public static SideMenuBehaveType? GetOverrideSideMenuBehave(AvaloniaObject element) => + element.GetValue(OverrideSideMenuBehaveProperty); + + public static void SetOverrideSideMenuBehave(AvaloniaObject element, SideMenuBehaveType? parameter) => + element.SetValue(OverrideSideMenuBehaveProperty, parameter); + + #endregion + + #endregion + #region Behavior protected virtual Task MenuActionAsync(CancellationToken cancellationToken) @@ -273,6 +290,11 @@ protected virtual void UpdateSideMenu() private SideMenuBehaveType GetCurrentBehave() { + var view = this._contentView?.CurrentView; + + if (view is StyledElement element && GetOverrideSideMenuBehave(element) is { } overrideBehave) + return overrideBehave; + return ScreenSize switch { ScreenSizeType.Small => SmallScreenSideMenuBehave, diff --git a/src/AvaloniaInside.Shell/ShellView.cs b/src/AvaloniaInside.Shell/ShellView.cs index 750124e..8d3d7b7 100644 --- a/src/AvaloniaInside.Shell/ShellView.cs +++ b/src/AvaloniaInside.Shell/ShellView.cs @@ -363,6 +363,7 @@ public async Task PushViewAsync(object view, await (_contentView?.PushViewAsync(view, navigateType, cancellationToken) ?? Task.CompletedTask); SelectSideMenuItem(); UpdateBindings(); + UpdateSideMenu(); } public async Task RemoveViewAsync(object view, diff --git a/src/Example/ShellExample/ShellExample/Views/WelcomeView.axaml b/src/Example/ShellExample/ShellExample/Views/WelcomeView.axaml index 28bb7a5..3ea86e2 100644 --- a/src/Example/ShellExample/ShellExample/Views/WelcomeView.axaml +++ b/src/Example/ShellExample/ShellExample/Views/WelcomeView.axaml @@ -4,7 +4,8 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="ShellExample.Views.WelcomeView" - NavigationBar.Visible="False"> + NavigationBar.Visible="False" + ShellView.OverrideSideMenuBehave="Removed">