diff --git a/DownKyi/ViewModels/MainWindowViewModel.cs b/DownKyi/ViewModels/MainWindowViewModel.cs index 0b920a7..db734c8 100644 --- a/DownKyi/ViewModels/MainWindowViewModel.cs +++ b/DownKyi/ViewModels/MainWindowViewModel.cs @@ -1,6 +1,8 @@ using System; +using System.Linq; using System.Threading; using Avalonia.Controls; +using Avalonia.Input; using Avalonia.Threading; using DownKyi.Core.Settings; using DownKyi.Events; @@ -17,6 +19,10 @@ public class MainWindowViewModel : BindableBase { private readonly IEventAggregator _eventAggregator; + private readonly IRegionManager _regionManager; + + private const string ContentRegion = nameof(ContentRegion); + private ClipboardListener? _clipboardListener; private bool _messageVisibility; @@ -50,6 +56,9 @@ public class MainWindowViewModel : BindableBase public DelegateCommand ClosingCommand => _closingCommand ??= _closingCommand = new DelegateCommand(ExecuteClosingCommand); + public DelegateCommand PointerPressedCommand => + new (ExecutePointerPressed); + private void ExecuteClosingCommand() { if (_clipboardListener == null) return; @@ -57,11 +66,29 @@ public class MainWindowViewModel : BindableBase _clipboardListener.Dispose(); } + private void ExecutePointerPressed(PointerPressedEventArgs e) + { + var point = e.GetCurrentPoint(null); + var updateKind = point.Properties.PointerUpdateKind; + if (updateKind == PointerUpdateKind.XButton1Pressed) + { + var v = GetCurrentUserControl()?.DataContext; + if (v is ViewModelBase vm) + { + vm.ExecuteBackSpace(); + e.Handled = true; + } + } + } + + private UserControl? GetCurrentUserControl() => _regionManager + .Regions[ContentRegion].ActiveViews + .FirstOrDefault() as UserControl; public MainWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator) { _eventAggregator = eventAggregator; - + _regionManager = regionManager; #region MyRegion _eventAggregator.GetEvent().Subscribe(view => @@ -71,7 +98,7 @@ public class MainWindowViewModel : BindableBase { "Parent", view.ParentViewName }, { "Parameter", view.Parameter } }; - regionManager.RequestNavigate("ContentRegion", view.ViewName, param); + regionManager.RequestNavigate(ContentRegion, view.ViewName, param); }); // 订阅消息发送事件 diff --git a/DownKyi/ViewModels/ViewDownloadManagerViewModel.cs b/DownKyi/ViewModels/ViewDownloadManagerViewModel.cs index a2823d2..b5974ee 100644 --- a/DownKyi/ViewModels/ViewDownloadManagerViewModel.cs +++ b/DownKyi/ViewModels/ViewDownloadManagerViewModel.cs @@ -69,7 +69,7 @@ public class ViewDownloadManagerViewModel : ViewModelBase /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { var parameter = new NavigationParam { diff --git a/DownKyi/ViewModels/ViewFriendsViewModel.cs b/DownKyi/ViewModels/ViewFriendsViewModel.cs index c661db1..3fe164a 100644 --- a/DownKyi/ViewModels/ViewFriendsViewModel.cs +++ b/DownKyi/ViewModels/ViewFriendsViewModel.cs @@ -76,7 +76,7 @@ namespace DownKyi.ViewModels /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { //InitView(); diff --git a/DownKyi/ViewModels/ViewLoginViewModel.cs b/DownKyi/ViewModels/ViewLoginViewModel.cs index db46657..92cdce3 100644 --- a/DownKyi/ViewModels/ViewLoginViewModel.cs +++ b/DownKyi/ViewModels/ViewLoginViewModel.cs @@ -55,7 +55,7 @@ public class ViewLoginViewModel : ViewModelBase public DelegateCommand BackSpaceCommand => _backSpaceCommand ??= new DelegateCommand(ExecuteBackSpace); - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { // 初始化状态 InitStatus(); diff --git a/DownKyi/ViewModels/ViewModelBase.cs b/DownKyi/ViewModels/ViewModelBase.cs index dcc28e1..c1927f8 100644 --- a/DownKyi/ViewModels/ViewModelBase.cs +++ b/DownKyi/ViewModels/ViewModelBase.cs @@ -34,6 +34,11 @@ public class ViewModelBase : BindableBase, INavigationAware ParentView = viewName; } } + + protected internal virtual void ExecuteBackSpace() + { + + } public bool IsNavigationTarget(NavigationContext navigationContext) { @@ -61,4 +66,5 @@ public class ViewModelBase : BindableBase, INavigationAware { Dispatcher.UIThread.Invoke(callback); } + } \ No newline at end of file diff --git a/DownKyi/ViewModels/ViewMyBangumiFollowViewModel.cs b/DownKyi/ViewModels/ViewMyBangumiFollowViewModel.cs index c286014..b4e2ce7 100644 --- a/DownKyi/ViewModels/ViewMyBangumiFollowViewModel.cs +++ b/DownKyi/ViewModels/ViewMyBangumiFollowViewModel.cs @@ -184,7 +184,7 @@ public class ViewMyBangumiFollowViewModel : ViewModelBase /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { InitView(); diff --git a/DownKyi/ViewModels/ViewMyFavoritesViewModel.cs b/DownKyi/ViewModels/ViewMyFavoritesViewModel.cs index eab7a75..8f88562 100644 --- a/DownKyi/ViewModels/ViewMyFavoritesViewModel.cs +++ b/DownKyi/ViewModels/ViewMyFavoritesViewModel.cs @@ -215,7 +215,7 @@ public class ViewMyFavoritesViewModel : ViewModelBase /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { InitView(); diff --git a/DownKyi/ViewModels/ViewMyHistoryViewModel.cs b/DownKyi/ViewModels/ViewMyHistoryViewModel.cs index 16f70cf..e81d848 100644 --- a/DownKyi/ViewModels/ViewMyHistoryViewModel.cs +++ b/DownKyi/ViewModels/ViewMyHistoryViewModel.cs @@ -146,7 +146,7 @@ public class ViewMyHistoryViewModel : ViewModelBase /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { InitView(); diff --git a/DownKyi/ViewModels/ViewMySpaceViewModel.cs b/DownKyi/ViewModels/ViewMySpaceViewModel.cs index 531f7a6..d0e44d5 100644 --- a/DownKyi/ViewModels/ViewMySpaceViewModel.cs +++ b/DownKyi/ViewModels/ViewMySpaceViewModel.cs @@ -330,7 +330,7 @@ public class ViewMySpaceViewModel : ViewModelBase /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { // 结束任务 _tokenSource?.Cancel(); diff --git a/DownKyi/ViewModels/ViewMyToViewVideoViewModel.cs b/DownKyi/ViewModels/ViewMyToViewVideoViewModel.cs index 5555655..4b4bdfa 100644 --- a/DownKyi/ViewModels/ViewMyToViewVideoViewModel.cs +++ b/DownKyi/ViewModels/ViewMyToViewVideoViewModel.cs @@ -136,7 +136,7 @@ public class ViewMyToViewVideoViewModel : ViewModelBase /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { InitView(); diff --git a/DownKyi/ViewModels/ViewPublicFavoritesViewModel.cs b/DownKyi/ViewModels/ViewPublicFavoritesViewModel.cs index 9a42598..a14d59d 100644 --- a/DownKyi/ViewModels/ViewPublicFavoritesViewModel.cs +++ b/DownKyi/ViewModels/ViewPublicFavoritesViewModel.cs @@ -165,7 +165,7 @@ public class ViewPublicFavoritesViewModel : ViewModelBase /// /// 返回 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { // 结束任务 _tokenSource?.Cancel(); diff --git a/DownKyi/ViewModels/ViewPublicationViewModel.cs b/DownKyi/ViewModels/ViewPublicationViewModel.cs index 14e5fb3..6a8b691 100644 --- a/DownKyi/ViewModels/ViewPublicationViewModel.cs +++ b/DownKyi/ViewModels/ViewPublicationViewModel.cs @@ -173,7 +173,7 @@ namespace DownKyi.ViewModels /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { ArrowBack.Fill = DictionaryResource.GetColor("ColorText"); diff --git a/DownKyi/ViewModels/ViewSeasonsSeriesViewModel.cs b/DownKyi/ViewModels/ViewSeasonsSeriesViewModel.cs index 487f096..e71d41c 100644 --- a/DownKyi/ViewModels/ViewSeasonsSeriesViewModel.cs +++ b/DownKyi/ViewModels/ViewSeasonsSeriesViewModel.cs @@ -164,7 +164,7 @@ public class ViewSeasonsSeriesViewModel : ViewModelBase /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { ArrowBack.Fill = DictionaryResource.GetColor("ColorText"); diff --git a/DownKyi/ViewModels/ViewSettingsViewModel.cs b/DownKyi/ViewModels/ViewSettingsViewModel.cs index a016506..1755f90 100644 --- a/DownKyi/ViewModels/ViewSettingsViewModel.cs +++ b/DownKyi/ViewModels/ViewSettingsViewModel.cs @@ -75,7 +75,7 @@ public class ViewSettingsViewModel : ViewModelBase /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { var parameter = new NavigationParam { diff --git a/DownKyi/ViewModels/ViewToolboxViewModel.cs b/DownKyi/ViewModels/ViewToolboxViewModel.cs index 1cc1ca6..24b3545 100644 --- a/DownKyi/ViewModels/ViewToolboxViewModel.cs +++ b/DownKyi/ViewModels/ViewToolboxViewModel.cs @@ -62,7 +62,7 @@ namespace DownKyi.ViewModels /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { var parameter = new NavigationParam { diff --git a/DownKyi/ViewModels/ViewUserSpaceViewModel.cs b/DownKyi/ViewModels/ViewUserSpaceViewModel.cs index 50de80c..935de8e 100644 --- a/DownKyi/ViewModels/ViewUserSpaceViewModel.cs +++ b/DownKyi/ViewModels/ViewUserSpaceViewModel.cs @@ -214,7 +214,7 @@ public class ViewUserSpaceViewModel : ViewModelBase /// /// 返回事件 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { var parameter = new NavigationParam { diff --git a/DownKyi/ViewModels/ViewVideoDetailViewModel.cs b/DownKyi/ViewModels/ViewVideoDetailViewModel.cs index b79c22d..b8138f7 100644 --- a/DownKyi/ViewModels/ViewVideoDetailViewModel.cs +++ b/DownKyi/ViewModels/ViewVideoDetailViewModel.cs @@ -153,7 +153,7 @@ public class ViewVideoDetailViewModel : ViewModelBase /// /// 返回 /// - private void ExecuteBackSpace() + protected internal override void ExecuteBackSpace() { var parameter = new NavigationParam { diff --git a/DownKyi/Views/MainWindow.axaml b/DownKyi/Views/MainWindow.axaml index 413cf0b..911c148 100644 --- a/DownKyi/Views/MainWindow.axaml +++ b/DownKyi/Views/MainWindow.axaml @@ -21,6 +21,10 @@ + + +