OrderContent.xaml.cs 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using System.Windows.Input;
  6. using Muchinfo.MTPClient.Data.Enums;
  7. using Muchinfo.MTPClient.Data.Model;
  8. using Muchinfo.MTPClient.Infrastructure.Cache;
  9. using Muchinfo.MTPClient.Infrastructure.Helpers;
  10. using Muchinfo.MTPClient.Trade.ViewModels;
  11. namespace Muchinfo.MTPClient.Trade.Views
  12. {
  13. /// <summary>
  14. /// OrderContent.xaml 的交互逻辑
  15. /// </summary>
  16. public partial class OrderContent : UserControl
  17. {
  18. private List<QuoteGoods> _quoteGoodses;
  19. public OrderContent()
  20. {
  21. // ViewModel -> TradeOrderViewModel
  22. InitializeComponent();
  23. //this.Bor_CommissionsHeight.Height = 280;
  24. MessengerHelper.DefaultRegister<bool>(this, MessengerTokens.SetOrderFoucsToken, (e) =>
  25. {
  26. if (this.IsVisible)
  27. {
  28. goodsComBoxBox.Focus();
  29. }
  30. });
  31. setFocusList.Add(goodsComBoxBox);
  32. setFocusList.Add(DecimalNum);
  33. setFocusList.Add(PriceNumBox);
  34. setFocusList.Add(btnMouseDown);
  35. goodsComBoxBox.GotFocus += goodsComBoxBox_GotFocus;
  36. DecimalNum.GotFocus += goodsComBoxBox_GotFocus;
  37. PriceNumBox.GotFocus += goodsComBoxBox_GotFocus;
  38. btnMouseDown.GotFocus += goodsComBoxBox_GotFocus;
  39. direction.Visibility = Visibility.Collapsed;
  40. goodsComBoxBox.DropDownClosed += goodsComBoxBox_DropDownClosed;
  41. MessengerHelper.DefaultRegister<bool>(this, MessengerTokens.TradeLoadGoods, (e) =>
  42. {
  43. if (OrderContentArea.Visibility != Visibility.Visible)
  44. {
  45. OrderContentArea.Visibility = Visibility.Visible;
  46. }
  47. });
  48. }
  49. void goodsComBoxBox_DropDownClosed(object sender, EventArgs e)
  50. {
  51. var viewModel = this.DataContext as TradeOrderViewModel;
  52. if (viewModel != null && _quoteGoodses != null)
  53. {
  54. viewModel.GoodsList = _quoteGoodses;
  55. }
  56. }
  57. #region 传统模式时调用修改五档高度
  58. public string TraditionCommissionsHeight
  59. {
  60. get { return (string)GetValue(TraditionCommissionsHeightProperty); }
  61. set { SetValue(TraditionCommissionsHeightProperty, value); }
  62. }
  63. // Using a DependencyProperty as the backing store for ShowText. This enables animation, styling, binding, etc...
  64. public static readonly DependencyProperty TraditionCommissionsHeightProperty =
  65. DependencyProperty.Register("TraditionCommissionsHeight", typeof(string), typeof(OrderContent), new PropertyMetadata("", new PropertyChangedCallback(TCHPropertyChangedCallback)));
  66. private static void TCHPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs arg)
  67. {
  68. if (sender != null && sender is OrderContent)
  69. {
  70. var windowContent = (OrderContent)sender;
  71. windowContent.Bor_CommissionsHeight.Height = double.Parse(windowContent.TraditionCommissionsHeight);
  72. }
  73. }
  74. #endregion
  75. void goodsComBoxBox_GotFocus(object sender, RoutedEventArgs e)
  76. {
  77. var index = setFocusList.FindIndex((item)=>sender.Equals(item) );
  78. if (index >= 0)
  79. {
  80. focusIndex = index;
  81. }
  82. }
  83. private void OrderContent_OnMouseDown(object sender, MouseButtonEventArgs e)
  84. {
  85. if (goodsComBoxBox.IsVisible)
  86. {
  87. goodsComBoxBox.Focus();
  88. e.Handled = true;
  89. }
  90. }
  91. List<Control> setFocusList=new List<Control>();
  92. private int focusIndex = 0;
  93. private void OrderContent_OnKeyUp(object sender, KeyEventArgs e)
  94. {
  95. if (this.IsKeyboardFocusWithin)
  96. {
  97. switch (e.Key)
  98. {
  99. case Key.Enter:
  100. //if (goodsComBoxBox.IsFocused)
  101. //{
  102. // DecimalNum.Focus();
  103. //}
  104. //else if (DecimalNum.IsKeyboardFocusWithin)
  105. //{
  106. // if (PriceNumBox.IsVisible)
  107. // {
  108. // PriceNumBox.Focus();
  109. // }
  110. // else
  111. // {
  112. // if (btnMouseDown.IsVisible)
  113. // {
  114. // btnMouseDown.Focus();
  115. // }
  116. // else
  117. // {
  118. // MessengerHelper.DefaultSend(true, MessengerTokens.SetButtonFoucsToken);
  119. // }
  120. // }
  121. //}
  122. //else if (PriceNumBox.IsKeyboardFocusWithin &&PriceNumBox.IsVisible)
  123. //{
  124. // if (btnMouseDown.IsVisible)
  125. // {
  126. // btnMouseDown.Focus();
  127. // }
  128. // else
  129. // {
  130. // MessengerHelper.DefaultSend(true, MessengerTokens.SetButtonFoucsToken);
  131. // }
  132. //}
  133. //else
  134. //{
  135. // goodsComBoxBox.Focus();
  136. //}
  137. SetContrlFocus(1);
  138. break;
  139. // 为什么要搞这些操作?界面会崩溃,我还是去掉它吧
  140. /*case Key.Up:
  141. SetContrlFocus(-1);
  142. e.Handled = true;
  143. break;
  144. case Key.Down:
  145. SetContrlFocus(1);
  146. e.Handled = true;
  147. break;*/
  148. default:
  149. break;
  150. }
  151. }
  152. }
  153. private string goodsBoxString = "";
  154. /// <summary>
  155. /// 设置焦点
  156. /// </summary>
  157. /// <param name="next"></param>
  158. private void SetContrlFocus(int next)
  159. {
  160. var index = focusIndex+next;
  161. if (index > setFocusList.Count - 1)
  162. {
  163. setFocusList[0].Focus();
  164. }
  165. else if (next < 0)
  166. {
  167. setFocusList[3].Focus();
  168. if (!btnMouseDown.IsVisible)
  169. {
  170. focusIndex = 3;
  171. MessengerHelper.DefaultSend(true, MessengerTokens.SetButtonFoucsToken);
  172. }
  173. //{
  174. // MessengerHelper.DefaultSend(true, MessengerTokens.SetButtonFoucsToken);
  175. // // focusIndex = 3;
  176. //}
  177. }
  178. if (index == 2 && !PriceNumBox.IsVisible)
  179. {
  180. index+= next;
  181. }
  182. if (index >= setFocusList.Count)
  183. {
  184. return;
  185. }
  186. setFocusList[index].Focus();
  187. if (!btnMouseDown.IsVisible && index==3)
  188. {
  189. focusIndex = 3;
  190. MessengerHelper.DefaultSend(true, MessengerTokens.SetButtonFoucsToken);
  191. }
  192. }
  193. private void UIElement_OnMouseDown(object sender, MouseButtonEventArgs e)
  194. {
  195. var viewModel = this.DataContext as TradeOrderViewModel;
  196. var element = sender as FrameworkElement;
  197. if (element != null &&viewModel!=null)
  198. {
  199. if (element.Tag is decimal)
  200. {
  201. viewModel.SetOrderPrice((decimal)element.Tag);
  202. }
  203. // element.Tag
  204. }
  205. }
  206. private void BidCommissionsListBox_MouseLeave(object sender, MouseEventArgs e)
  207. {
  208. this.BidCommissionsListBox.SelectedIndex = -1;
  209. }
  210. private void AskCommissionsListBox_MouseLeave(object sender, MouseEventArgs e)
  211. {
  212. this.AskCommissionsListBox.SelectedIndex = -1;
  213. }
  214. /// <summary>
  215. /// 商品栏输入商品的时候
  216. /// </summary>
  217. /// <param name="sender"></param>
  218. /// <param name="e"></param>
  219. private void goodsComBoxBox_KeyUp(object sender, KeyEventArgs e)
  220. {
  221. if (this.IsKeyboardFocusWithin)
  222. {
  223. switch (e.Key)
  224. {
  225. //暂时似乎没有其他的指令需要处理
  226. default:
  227. {
  228. if (!goodsBoxString.Equals(goodsComBoxBox.Text))
  229. {
  230. goodsBoxString = goodsComBoxBox.Text;
  231. }
  232. else
  233. {
  234. return;
  235. }
  236. var viewModel = this.DataContext as TradeOrderViewModel;
  237. if (_quoteGoodses == null && viewModel != null)// 在关闭dropdown的时候,要用到原来的值
  238. {
  239. _quoteGoodses = viewModel.GoodsList;
  240. }
  241. var goods = CacheManager.CacheGoodsBaseInfos.FindAll(i => (i.GoodsCode.Contains(goodsBoxString) || i.Name.Contains(goodsBoxString))); // 过滤匹配的商品
  242. if (viewModel != null)
  243. {
  244. viewModel.GoodsList = goods;// 给绑定的空间丢数据
  245. }
  246. goodsComBoxBox.IsDropDownOpen = goods.Count > 0;// 有数据就显示,没有数据就没有必要显示了。
  247. break;
  248. }
  249. }
  250. }
  251. }
  252. }
  253. }