using System.Windows; using System.Windows.Input; using GlobalHotKey; using HandyControl.Controls; using SparkClient.Model.Helper; using SparkClient.ViewModel.Grading; using MessageBox = SparkClient.Views.Dialog.MessageBox; namespace SparkClient.ViewModel.BaseWindow; public class BaseControlVM : BaseViewModel { string _windowTitle; private Visibility _showFunctionButton; private string _functionButtonIcon; private Object _viewContent; public string WindowTitle { get { return _windowTitle; } set { _windowTitle = value; OnPropertyChanged("WindowTitle"); } } public Visibility ShowFunctionButton { get { return _showFunctionButton; } set { _showFunctionButton = value; OnPropertyChanged("ShowFunctionButton"); } } public string FunctionButtonIcon { get { return _functionButtonIcon; } set { _functionButtonIcon = value; OnPropertyChanged("FunctionButtonIcon"); } } public Object ViewControl { get { return _viewContent; } set { _viewContent = value; OnPropertyChanged("ViewControl"); } } public object Content { get; } public ICommand CloseCommand { get; } public ICommand EscCloseCommand { get; } public ICommand NextCommand { get; } private HotKeyManager _hotKeyManager; /// /// 构造:创建一个带有子页面的模板,并指定子窗口标题,并指定右侧按钮事件内容 /// /// 子页面 /// 子窗口标题 /// 事件内哦那个 public BaseControlVM(BaseViewModel vm, string windowTitle, ICommand Function) { Content = vm; WindowTitle = windowTitle; CloseCommand = new RelayCommand(CloseVM); EscCloseCommand = new RelayCommand(OnClose); NextCommand = new RelayCommand(NextDiamond); _hotKeyManager = new HotKeyManager(); } /// /// 构造:创建一个带有子页面的模板,并指定子窗口标题 /// /// 子页面 /// 子窗口标题 public BaseControlVM(BaseViewModel vm, string windowTitle) { Content = vm; WindowTitle = windowTitle; ShowFunctionButton = Visibility.Hidden; CloseCommand = new RelayCommand(CloseVM); NextCommand = new RelayCommand(NextDiamond); if (vm.GetType().Equals(typeof(GradingResultVM))) { Application.Current.Dispatcher.Invoke(() => { try { _hotKeyManager = new HotKeyManager(); var hotKey = new HotKey(Key.R, ModifierKeys.Control | ModifierKeys.Alt); _hotKeyManager.Register(hotKey); _hotKeyManager.KeyPressed += OnHotKeyPressed; } catch (Exception ex) { Logger.Info("设计缺陷:快捷键重复注册"); } }); } else { // _hotKeyManager = new HotKeyManager(); // var hotKey = new HotKey(Key.R, ModifierKeys.Control | ModifierKeys.Alt); // _hotKeyManager.Unregister(hotKey); } } /// /// 构造:创建一个带有子页面的模板 /// /// public BaseControlVM(BaseViewModel vm) { Content = vm; CloseCommand = new RelayCommand(CloseVM); } private void OnClose(object parameter) { if (parameter is KeyEventArgs keyEventArgs && keyEventArgs.Key == Key.Escape) { CloseVM(parameter); } } private void OnHotKeyPressed(object sender, KeyPressedEventArgs e) { if(WindowTitle.StartsWith(MultilingualHelper.getString("DetectionResult"))) NextDiamond(""); } public void NextDiamond(object parameter) { CloseVM(parameter); DiamondSelectVM selectVm = new DiamondSelectVM(); ViewControl = selectVm; WindowTitle = MultilingualHelper.getString("DiamondSelect"); selectVm.StartGrading("ROUND P8 P8"); } /// /// 关闭并退回至上一个页面 /// /// public void CloseVM(object parameter) { if(Content is GradingResultVM) { bool isSaved = (Content as GradingResultVM).isSaved; if (isSaved) { WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); } else { // 部署改造:2 WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); // MessageBox message = new MessageBox(); // MessageBoxResult result = message.ShowAsk(MultilingualHelper.getString("DiamodResultCloseConfirm")); // if (MessageBoxResult.OK.Equals(result)) // { // WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); // } } } else { WindowManager.mainViewModel.Content = WindowManager.PreviousVM(); } } }