XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

HaloPixelToolBox

【WinUI3】基于USB HID通讯的花再音响工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using HaloPixelToolBox.Client.Profiles.CrossVersionProfiles;
using HaloPixelToolBox.Client.ViewModels;
using XFEExtension.NetCore.WinUIHelper.Utilities.Helper;

namespace HaloPixelToolBox.Client.Views;

/// <summary>
/// AppShell
/// </summary>
public sealed partial class AppShellPage : Page
{
    public static AppShellPage? Current { get; set; }
    public AppShellPageViewModel ViewModel { get; set; } = new();
    public AppShellPage()
    {
        Current = this;
        this.InitializeComponent();
        App.MainWindow?.SetTitleBar(appTitleBar);
        ViewModel.NavigationViewService.Initialize(navigationView, navigationFrame);
        ViewModel.MessageService.Initialize(messageStackPanel, DispatcherQueue);
        ViewModel.DialogService.RegisterDialog(upgradeDialog);
        ViewModel.DialogService.RegisterDialog(closeDialog);
        ViewModel.PageService.Initialize(this);
        ViewModel.LoadingService.Initialize(loadingGrid, globalLoadingGrid, globalLoadingTextBlock, DispatcherQueue, ViewModel.NavigationViewService.NavigationService);
        if (SystemProfile.DefaultPage == "SpotifyLyricsToolPage")
            ViewModel.NavigationViewService.NavigateTo<SpotifyLyricsToolPage>();
        else
            ViewModel.NavigationViewService.NavigateTo<CloudMusicLyricsToolPage>();
    }

    private void NavigationView_DisplayModeChanged(NavigationView sender, NavigationViewDisplayModeChangedEventArgs args)
    {
        switch (sender.PaneDisplayMode)
        {
            case NavigationViewPaneDisplayMode.Auto:
                navigationView.Margin = new();
                appTitleBar.Margin = new()
                {
                    Left = sender.CompactPaneLength * (sender.DisplayMode == NavigationViewDisplayMode.Minimal ? 2 : 1),
                    Top = appTitleBar.Margin.Top,
                    Right = appTitleBar.Margin.Right,
                    Bottom = appTitleBar.Margin.Bottom
                };
                break;
            case NavigationViewPaneDisplayMode.Left:
                navigationView.Margin = new();
                appTitleBar.Margin = new()
                {
                    Left = sender.CompactPaneLength * (sender.DisplayMode == NavigationViewDisplayMode.Minimal ? 2 : 1),
                    Top = appTitleBar.Margin.Top,
                    Right = appTitleBar.Margin.Right,
                    Bottom = appTitleBar.Margin.Bottom
                };
                break;
            case NavigationViewPaneDisplayMode.Top:
                navigationView.Margin = new(0, 48, 0, 0);
                appTitleBar.Margin = new(16, 0, 0, 0);
                break;
            case NavigationViewPaneDisplayMode.LeftCompact:
                navigationView.Margin = new();
                appTitleBar.Margin = new()
                {
                    Left = sender.CompactPaneLength * (sender.DisplayMode == NavigationViewDisplayMode.Minimal ? 2 : 1),
                    Top = appTitleBar.Margin.Top,
                    Right = appTitleBar.Margin.Right,
                    Bottom = appTitleBar.Margin.Bottom
                };
                break;
            case NavigationViewPaneDisplayMode.LeftMinimal:
                navigationView.Margin = new();
                appTitleBar.Margin = new()
                {
                    Left = sender.CompactPaneLength * (sender.DisplayMode == NavigationViewDisplayMode.Minimal ? 2 : 1),
                    Top = appTitleBar.Margin.Top,
                    Right = appTitleBar.Margin.Right,
                    Bottom = appTitleBar.Margin.Bottom
                };
                break;
            default:
                break;
        }
    }

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        AppThemeHelper.ChangeTheme(SystemProfile.Theme);
    }

    private void NavigationView_PaneOpening(NavigationView sender, object args)
    {
        rightPanelGrid.TranslationTransition = new();
        rightPanelGrid.Translation = new((float)(sender.OpenPaneLength / 2 - sender.CompactPaneLength * (sender.DisplayMode == NavigationViewDisplayMode.Minimal ? 1f : 0.5f)) + rightPanelGrid.Translation.X, 0, 0);
    }

    private void NavigationView_PaneOpened(NavigationView sender, object args)
    {
        rightPanelGrid.TranslationTransition = null;
        rightPanelGrid.Translation = new();
        rightPanelGrid.Margin = new()
        {
            Left = sender.OpenPaneLength,
            Top = 50
        };
    }

    private void NavigationView_PaneClosing(NavigationView sender, NavigationViewPaneClosingEventArgs args)
    {
        rightPanelGrid.TranslationTransition = new();
        rightPanelGrid.Translation = new((float)(sender.CompactPaneLength * (sender.DisplayMode == NavigationViewDisplayMode.Minimal ? 1f : 0.5f) - sender.OpenPaneLength / 2) + rightPanelGrid.Translation.X, 0, 0);
    }

    private void NavigationView_PaneClosed(NavigationView sender, object args)
    {
        rightPanelGrid.TranslationTransition = null;
        rightPanelGrid.Translation = new();
        rightPanelGrid.Margin = new()
        {
            Left = sender.CompactPaneLength * (sender.DisplayMode == NavigationViewDisplayMode.Minimal ? 2 : 1),
            Top = 50
        };
    }
}