MainPage.xaml.cs 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. using System.Windows.Forms;
  2. using GalaSoft.MvvmLight.Ioc;
  3. using Muchinfo.MTPClient.Account.Views;
  4. using Muchinfo.MTPClient.Data.Enums;
  5. using Muchinfo.MTPClient.Infrastructure.Helpers;
  6. using Muchinfo.MTPClient.Infrastructure.MessageBox;
  7. using Muchinfo.MTPClient.Infrastructure.Utilities;
  8. using Muchinfo.MTPClient.IService;
  9. using Muchinfo.MTPClient.Resources;
  10. using Muchinfo.MTPClient.UI.Utilities;
  11. using Muchinfo.MTPClient.UI.ViewModels;
  12. using Muchinfo.PC.Common.Helpers;
  13. using Muchinfo.WPF.Controls.Windows;
  14. using System;
  15. using System.Windows;
  16. using System.Windows.Input;
  17. using System.Windows.Threading;
  18. using Muchinfo.MTPClient.Report.Views;
  19. using KeyEventArgs = System.Windows.Input.KeyEventArgs;
  20. using Microsoft.Web.WebView2.Core;
  21. namespace Muchinfo.MTPClient.UI.Views
  22. {
  23. /// <summary>
  24. /// MainView.xaml 的交互逻辑
  25. /// </summary>
  26. public partial class MainPage : Window
  27. {
  28. private Style windowMaxImageStyle;
  29. private Style windowImageStyle;
  30. public MainPage()
  31. {
  32. InitializeComponent();
  33. new WindowResizer(this,
  34. new WindowBorder(BorderPosition.TopLeft, TopLeftBorder),
  35. new WindowBorder(BorderPosition.Top, TopBorder),
  36. new WindowBorder(BorderPosition.TopRight, TopRightBorder),
  37. new WindowBorder(BorderPosition.Right, RightBorder),
  38. new WindowBorder(BorderPosition.BottomRight, BottomRightBorder),
  39. new WindowBorder(BorderPosition.Bottom, BottomBorder),
  40. new WindowBorder(BorderPosition.BottomLeft, BottomLeftBorder),
  41. new WindowBorder(BorderPosition.Left, LeftBorder));
  42. //避免窗口最大化时遮盖任务栏
  43. FullScreenManager.RepairWpfWindowFullScreenBehavior(this);
  44. // this.WindowState =WindowState.Maximized;
  45. this.SizeChanged += Home_SizeChanged;
  46. MessageRegister.Register(this);
  47. this.Loaded += Home_Loaded;
  48. this.KeyUp += MainPage_KeyUp;
  49. windowMaxImageStyle = ResourceHelper.GetFromeResource<Style>("WindowMaxImageStyle");
  50. windowImageStyle = ResourceHelper.GetFromeResource<Style>("WindowMaxImageStyle1");
  51. ////订阅行情
  52. //MessengerHelper.DefaultSend(string.Empty, MessengerTokens.QuoteSubscribe);
  53. MessengerHelper.DefaultRegister<string>(this, MessengerTokens.RegisterResourceChange, (e) =>
  54. {
  55. ////解决切换主题时菜单第一行没居中问题
  56. if (this.WindowState == WindowState.Maximized)
  57. {
  58. this.WindowState = WindowState.Minimized;
  59. this.WindowState = WindowState.Maximized;
  60. }
  61. });
  62. }
  63. private void MainPage_KeyUp(object sender, KeyEventArgs e)
  64. {
  65. var homeViewModel = this.DataContext as HomeViewModel;
  66. if (homeViewModel != null && homeViewModel.IsLockScreen)
  67. {
  68. if (e.Key == Key.Escape) homeViewModel.LoginOutCommand.Execute(null);
  69. }
  70. }
  71. private void Home_Loaded(object sender, RoutedEventArgs e)
  72. {
  73. var homeViewModel = this.DataContext as HomeViewModel;
  74. if (homeViewModel != null)
  75. {
  76. this.InputBindings.AddRange(homeViewModel.InitKeysCommand());
  77. }
  78. // 获取风管Web端
  79. InitializeAsync();
  80. }
  81. async void InitializeAsync()
  82. {
  83. // must create a data folder if running out of a secured folder that can't write like Program Files
  84. //var path = System.IO.Path.Combine(System.IO.Path.GetTempPath(), "MarkdownMonster_Browser");
  85. //var env = await CoreWebView2Environment.CreateAsync(userDataFolder: path);
  86. // NOTE: this waits until the first page is navigated - then continues
  87. // executing the next line of code!
  88. await webView.EnsureCoreWebView2Async(null);
  89. // Optional: Map a folder from the Executable Folder to a virtual domain
  90. // NOTE: This requires a Canary preview currently (.720+)
  91. //webView.CoreWebView2.SetVirtualHostNameToFolderMapping(
  92. // "test.editor", "HtmlSample",
  93. // CoreWebView2HostResourceAccessKind.Allow);
  94. // You can then navigate the file from disk with the domain
  95. var loginID = UserManager.CurrentTradeAccount.LoginID;
  96. var pwd = UserManager.CurrentTradeAccount.Md5Password;
  97. var url = String.Format("{0}?ACCOUNT={1}&PASSWORD={2}", ApplicationParameter.ErmcpWebUrl, loginID, pwd);
  98. webView.Source = new Uri(url);
  99. //webView.CoreWebView2.OpenDevToolsWindow();
  100. }
  101. private void Home_SizeChanged(object sender, SizeChangedEventArgs e)
  102. {
  103. MaxImageButton.Style = WindowState == WindowState.Maximized ? windowMaxImageStyle : windowImageStyle;
  104. }
  105. #region 窗口操作
  106. private void Window_MouseDown(object sender, MouseButtonEventArgs e)
  107. {
  108. if (e.LeftButton == MouseButtonState.Pressed)
  109. {
  110. DragMove();
  111. }
  112. if (e.ClickCount == 2)
  113. {
  114. this.WindowState = this.WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized;
  115. }
  116. }
  117. private void WinMin_OnClick(object sender, RoutedEventArgs e)
  118. {
  119. this.WindowState = WindowState.Minimized;
  120. }
  121. private void WinMax_OnClick(object sender, RoutedEventArgs e)
  122. {
  123. this.WindowState = this.WindowState == WindowState.Maximized ? WindowState.Normal : WindowState.Maximized;
  124. }
  125. private void WinClose_OnClick(object sender, RoutedEventArgs e)
  126. {
  127. ////保存布局及列表行情抬头
  128. var messageResult = MessageBoxHelper.ShowQuestion(this, Client_Resource.UI2014_IsOrNotExit, Client_Resource.UI2014_Tips);
  129. if (messageResult == MessageBoxResult.Yes)
  130. {
  131. //手动发送登出消息
  132. if (UserManager.IsAccountLogin)
  133. {
  134. MessengerHelper.DefaultSend(string.Empty, MessengerTokens.SaveLayout);
  135. var service = SimpleIoc.Default.GetInstance<ILoginService>();
  136. if (service != null) service.TradeAccountLogout(UserManager.CurrentTradeAccount);
  137. }
  138. this.Close();
  139. }
  140. }
  141. #endregion
  142. private void UIElement_OnIsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
  143. {
  144. var element = sender as FrameworkElement;
  145. if (e.NewValue.Equals(true) && element!=null)
  146. {
  147. this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new Action(() =>
  148. {
  149. element.Focus();
  150. }));
  151. }
  152. }
  153. protected override void OnKeyUp(KeyEventArgs e)
  154. {
  155. base.OnKeyUp(e);
  156. var homeViewModel = this.DataContext as HomeViewModel;
  157. if (homeViewModel != null && e.Key == Key.Tab && Keyboard.Modifiers == ModifierKeys.Control)
  158. {
  159. homeViewModel.KeyCommand.Execute(CommandFunc.Tab);
  160. }
  161. }
  162. private void TradeSet_OnClick(object sender, RoutedEventArgs e)
  163. {
  164. var tradeSet = new TradeParamSetView()
  165. {
  166. Owner = System.Windows.Application.Current.MainWindow,
  167. WindowStartupLocation = WindowStartupLocation.CenterOwner
  168. };
  169. tradeSet.ShowDialog();
  170. }
  171. private void LockScreenBGGrid_OnKeyUp(object sender, KeyEventArgs e)
  172. {
  173. var homeViewModel = this.DataContext as HomeViewModel;
  174. if (homeViewModel != null && KeyGrid.IsKeyboardFocusWithin && e.Key == Key.Enter && homeViewModel.IsLockScreen)
  175. {
  176. homeViewModel.UnLockCommand.Execute(null);
  177. e.Handled = true;
  178. }
  179. }
  180. private void UIElement_OnKeyDown(object sender, KeyEventArgs e)
  181. {
  182. }
  183. }
  184. }