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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using XFEEDToolBox.ViewModels;

namespace XFEEDToolBox.Views;
public sealed partial class SystemMapCataloguePage:Page
{
    public ToolboxViewModel ViewModel=>App.ViewModel;
    private bool choosing;
    public SystemMapCataloguePage()
    {
        InitializeComponent();NavigationCacheMode=Microsoft.UI.Xaml.Navigation.NavigationCacheMode.Required;
        Loaded+=(_,_)=>{ViewModel.RemoteMapChanged+=RefreshScene;ViewModel.PropertyChanged+=ModelChanged;RefreshScene();Resize();};
        Unloaded+=(_,_)=>{ViewModel.RemoteMapChanged-=RefreshScene;ViewModel.PropertyChanged-=ModelChanged;};
        SizeChanged+=(_,_)=>Resize();
        SystemMap.LocationSelected+=(_,location)=>
        {
            var row=ViewModel.RemoteMapLocations.FirstOrDefault(value=>value.Record.Identity==location.Identity);if(row is null)return;
            choosing=true;try{ViewModel.RemoteMapSelection=row;LocationsList.ScrollIntoView(row);}finally{choosing=false;}
        };
    }
    private void Resize()
    {
        var compact=ActualWidth<1000;CatalogueColumn.Width=new(compact?210:285);DetailsColumn.Width=new(compact?210:250);
        Overlay.ColumnSpacing=compact?8:14;SystemMap.SetOverlayInsets(CatalogueColumn.Width.Value+32,DetailsColumn.Width.Value+32);
    }
    private void RefreshScene(){SystemMap.SetSnapshot(ViewModel.RemoteMapSnapshot,ViewModel.RemoteMapLocations.Select(row=>row.Record).ToArray());SystemMap.SetSelection(ViewModel.RemoteMapSelection?.Record.Identity);}
    private void ModelChanged(object? sender,System.ComponentModel.PropertyChangedEventArgs args)
    {if(args.PropertyName==nameof(ViewModel.RemoteMapSelection))SystemMap.SetSelection(ViewModel.RemoteMapSelection?.Record.Identity);}
    private void LocationSelectionChanged(object sender,SelectionChangedEventArgs args)
    {SystemMap.SetSelection(ViewModel.RemoteMapSelection?.Record.Identity);if(!choosing&&args.AddedItems.Count>0)SystemMap.FocusSelection();}
    private void BackClicked(object sender,RoutedEventArgs args)=>AppShellPage.Current?.Navigate(typeof(NavigationPage));
    private void OverviewClicked(object sender,RoutedEventArgs args)=>SystemMap.ResetCamera();
    private void FocusClicked(object sender,RoutedEventArgs args)=>SystemMap.FocusSelection();
    private void ZoomInClicked(object sender,RoutedEventArgs args)=>SystemMap.Zoom(1);
    private void ZoomOutClicked(object sender,RoutedEventArgs args)=>SystemMap.Zoom(-1);
    internal Controls.LocalSystemMapView MapForProbe=>SystemMap;
}