using XFEExtension.NetCore.WinUIHelper.Interface.Services;
using XFEExtension.NetCore.WinUIHelper.Utilities;
using XFEEDToolBox.ViewModels;
using XFEEDToolBox.Services;
namespace XFEEDToolBox.Views;
public sealed partial class AppShellPage : Page
{
public static AppShellPage? Current { get; private set; }
public ToolboxViewModel ViewModel => App.ViewModel;
public Page? CurrentPage => NavigationFrame.Content as Page;
private readonly INavigationViewService navigation = ServiceManager.GetService<INavigationViewService>();
private FloatingUpgradeList? floatingUpgradeList;
public AppShellPage()
{
Current = this; InitializeComponent();
UpgradeListPanel.ExpandRequested+=ExpandUpgradeList;UpgradeListPanel.DetailsRequested+=ShowUpgradeDetails;
App.MainWindow.Closed+=(_,_)=>floatingUpgradeList?.Dispose();
void UpdateProfileFooter()=>ProfileFooterText.Visibility=Navigation.IsPaneOpen?Visibility.Visible:Visibility.Collapsed;
Navigation.RegisterPropertyChangedCallback(NavigationView.IsPaneOpenProperty,(_,_)=>UpdateProfileFooter());
Loaded+=(_,_)=>UpdateProfileFooter();
App.MainWindow.SetTitleBar(TitleRegion);
TitleActions.SizeChanged+=(_,_)=>UpdateTitleInput();TitleRegion.SizeChanged+=(_,_)=>UpdateTitleInput();Loaded+=(_,_)=>UpdateTitleInput();
App.MainWindow.AppWindow.Changed+=(_,_)=>UpdateTitleInput();
navigation.Initialize(Navigation, NavigationFrame);
navigation.NavigationService.Navigated += (_, _) =>
{
Navigation.Header=null;var map=CurrentPage is NavigationPage or CurrentSystemPage or SystemMapCataloguePage;
ContentLayout.Padding=map?new Thickness(0):new Thickness(24,10,24,0);ContentLayout.RowSpacing=map?0:12;
};
navigation.NavigateTo<MainPage>();
}
public void Navigate(Type page) => navigation.NavigateTo(page==typeof(GalaxyMapPage)?typeof(NavigationPage):page);
private void OpenUpgradeDetails(object sender,RoutedEventArgs e)=>ShowUpgradeDetails();
internal void ShowUpgradeDetails(){UpgradeListFlyout.Hide();Navigate(typeof(UpgradeListPage));}
internal void ShowUpgradeFlyout()=>UpgradeListFlyout.ShowAt(UpgradeListButton);
private void ExpandUpgradeList()
{
UpgradeListFlyout.Hide();
try
{
if(floatingUpgradeList is {} existing){existing.Show();return;}
var point=UpgradeListButton.TransformToVisual(this).TransformPoint(new(UpgradeListButton.ActualWidth,UpgradeListButton.ActualHeight));var scale=XamlRoot.RasterizationScale;var position=App.MainWindow.AppWindow.Position;
var popup=new FloatingUpgradeList(WinRT.Interop.WindowNative.GetWindowHandle(App.MainWindow),position.X+(int)((point.X-400)*scale),position.Y+(int)(point.Y*scale));floatingUpgradeList=popup;
popup.Closed+=()=>floatingUpgradeList=null;
}
catch(Exception error){ViewModel.ShowError("悬浮清单未打开:"+error.Message);ShowUpgradeFlyout();}
}
private void OpenProfile(object sender,RoutedEventArgs args){ProfileFlyout.Hide();Navigate(typeof(ProfilePage));}
private void CopyCommanderId(object sender,RoutedEventArgs args)
{
if(ViewModel.ProfileCommanderId=="未读取")return;
var content=new Windows.ApplicationModel.DataTransfer.DataPackage();content.SetText(ViewModel.ProfileCommanderId);
Windows.ApplicationModel.DataTransfer.Clipboard.SetContent(content);
ToolTipService.SetToolTip(CopyCommanderIdButton,"已复制 CMDR ID");
}
private void UpdateTitleInput()
{
if(XamlRoot is null)return;var origin=TitleActions.TransformToVisual(this).TransformPoint(new(0,0));var scale=XamlRoot.RasterizationScale;
var title=App.MainWindow.AppWindow.TitleBar;
if(title.Height>0)TitleRow.Height=new GridLength(title.Height/scale);
TitleRegion.Padding=new Thickness(18,0,Math.Max(0,title.RightInset/scale)+24,0);
Microsoft.UI.Input.InputNonClientPointerSource.GetForWindowId(App.MainWindow.AppWindow.Id).SetRegionRects(Microsoft.UI.Input.NonClientRegionKind.Passthrough,[new Windows.Graphics.RectInt32((int)(origin.X*scale),(int)(origin.Y*scale),(int)Math.Ceiling(TitleActions.ActualWidth*scale),(int)Math.Ceiling(TitleActions.ActualHeight*scale))]);
}
}
using XFEExtension.NetCore.WinUIHelper.Interface.Services;
using XFEExtension.NetCore.WinUIHelper.Utilities;
using XFEEDToolBox.ViewModels;
using XFEEDToolBox.Services;
namespace XFEEDToolBox.Views;
public sealed partial class AppShellPage : Page
{
public static AppShellPage? Current { get; private set; }
public ToolboxViewModel ViewModel => App.ViewModel;
public Page? CurrentPage => NavigationFrame.Content as Page;
private readonly INavigationViewService navigation = ServiceManager.GetService<INavigationViewService>();
private FloatingUpgradeList? floatingUpgradeList;
public AppShellPage()
{
Current = this; InitializeComponent();
UpgradeListPanel.ExpandRequested+=ExpandUpgradeList;UpgradeListPanel.DetailsRequested+=ShowUpgradeDetails;
App.MainWindow.Closed+=(_,_)=>floatingUpgradeList?.Dispose();
void UpdateProfileFooter()=>ProfileFooterText.Visibility=Navigation.IsPaneOpen?Visibility.Visible:Visibility.Collapsed;
Navigation.RegisterPropertyChangedCallback(NavigationView.IsPaneOpenProperty,(_,_)=>UpdateProfileFooter());
Loaded+=(_,_)=>UpdateProfileFooter();
App.MainWindow.SetTitleBar(TitleRegion);
TitleActions.SizeChanged+=(_,_)=>UpdateTitleInput();TitleRegion.SizeChanged+=(_,_)=>UpdateTitleInput();Loaded+=(_,_)=>UpdateTitleInput();
App.MainWindow.AppWindow.Changed+=(_,_)=>UpdateTitleInput();
navigation.Initialize(Navigation, NavigationFrame);
navigation.NavigationService.Navigated += (_, _) =>
{
Navigation.Header=null;var map=CurrentPage is NavigationPage or CurrentSystemPage or SystemMapCataloguePage;
ContentLayout.Padding=map?new Thickness(0):new Thickness(24,10,24,0);ContentLayout.RowSpacing=map?0:12;
};
navigation.NavigateTo<MainPage>();
}
public void Navigate(Type page) => navigation.NavigateTo(page==typeof(GalaxyMapPage)?typeof(NavigationPage):page);
private void OpenUpgradeDetails(object sender,RoutedEventArgs e)=>ShowUpgradeDetails();
internal void ShowUpgradeDetails(){UpgradeListFlyout.Hide();Navigate(typeof(UpgradeListPage));}
internal void ShowUpgradeFlyout()=>UpgradeListFlyout.ShowAt(UpgradeListButton);
private void ExpandUpgradeList()
{
UpgradeListFlyout.Hide();
try
{
if(floatingUpgradeList is {} existing){existing.Show();return;}
var point=UpgradeListButton.TransformToVisual(this).TransformPoint(new(UpgradeListButton.ActualWidth,UpgradeListButton.ActualHeight));var scale=XamlRoot.RasterizationScale;var position=App.MainWindow.AppWindow.Position;
var popup=new FloatingUpgradeList(WinRT.Interop.WindowNative.GetWindowHandle(App.MainWindow),position.X+(int)((point.X-400)*scale),position.Y+(int)(point.Y*scale));floatingUpgradeList=popup;
popup.Closed+=()=>floatingUpgradeList=null;
}
catch(Exception error){ViewModel.ShowError("悬浮清单未打开:"+error.Message);ShowUpgradeFlyout();}
}
private void OpenProfile(object sender,RoutedEventArgs args){ProfileFlyout.Hide();Navigate(typeof(ProfilePage));}
private void CopyCommanderId(object sender,RoutedEventArgs args)
{
if(ViewModel.ProfileCommanderId=="未读取")return;
var content=new Windows.ApplicationModel.DataTransfer.DataPackage();content.SetText(ViewModel.ProfileCommanderId);
Windows.ApplicationModel.DataTransfer.Clipboard.SetContent(content);
ToolTipService.SetToolTip(CopyCommanderIdButton,"已复制 CMDR ID");
}
private void UpdateTitleInput()
{
if(XamlRoot is null)return;var origin=TitleActions.TransformToVisual(this).TransformPoint(new(0,0));var scale=XamlRoot.RasterizationScale;
var title=App.MainWindow.AppWindow.TitleBar;
if(title.Height>0)TitleRow.Height=new GridLength(title.Height/scale);
TitleRegion.Padding=new Thickness(18,0,Math.Max(0,title.RightInset/scale)+24,0);
Microsoft.UI.Input.InputNonClientPointerSource.GetForWindowId(App.MainWindow.AppWindow.Id).SetRegionRects(Microsoft.UI.Input.NonClientRegionKind.Passthrough,[new Windows.Graphics.RectInt32((int)(origin.X*scale),(int)(origin.Y*scale),(int)Math.Ceiling(TitleActions.ActualWidth*scale),(int)Math.Ceiling(TitleActions.ActualHeight*scale))]);
}
}