NumberBox.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Input;
  4. using System.Windows.Controls;
  5. using System.Collections.Generic;
  6. namespace CustomUI.MyControls.Primitives
  7. {
  8. /// <summary>
  9. /// 用于日历显示时分秒的控件
  10. /// </summary>
  11. public class NumberBox : ComboBox
  12. {
  13. static NumberBox()
  14. {
  15. DefaultStyleKeyProperty.OverrideMetadata(typeof(NumberBox), new FrameworkPropertyMetadata(typeof(NumberBox)));
  16. }
  17. #region 依赖属性
  18. public static readonly DependencyProperty StartNumberProperty = DependencyProperty.Register("StartNumber"
  19. , typeof(int), typeof(NumberBox));
  20. /// <summary>
  21. /// 起始数字
  22. /// </summary>
  23. public int StartNumber
  24. {
  25. get { return (int)GetValue(StartNumberProperty); }
  26. set { SetValue(StartNumberProperty, value); }
  27. }
  28. public static readonly DependencyProperty EndNumberProperty = DependencyProperty.Register("EndNumber"
  29. , typeof(int), typeof(NumberBox));
  30. /// <summary>
  31. /// 结束数字
  32. /// </summary>
  33. public int EndNumber
  34. {
  35. get { return (int)GetValue(EndNumberProperty); }
  36. set { SetValue(EndNumberProperty, value); }
  37. }
  38. public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title"
  39. , typeof(string), typeof(NumberBox));
  40. /// <summary>
  41. /// 标题
  42. /// </summary>
  43. public string Title
  44. {
  45. get { return (string)GetValue(TitleProperty); }
  46. set { SetValue(TitleProperty, value); }
  47. }
  48. public static readonly DependencyProperty MaxDropDownWidthProperty = DependencyProperty.Register("MaxDropDownWidth"
  49. , typeof(double), typeof(NumberBox));
  50. /// <summary>
  51. /// 弹出框的最大宽度
  52. /// </summary>
  53. public double MaxDropDownWidth
  54. {
  55. get { return (double)GetValue(MaxDropDownWidthProperty); }
  56. set { SetValue(MaxDropDownWidthProperty, value); }
  57. }
  58. public static readonly DependencyProperty ShowShadowProperty = DependencyProperty.Register("ShowShadow"
  59. , typeof(bool), typeof(NumberBox));
  60. /// <summary>
  61. /// 是否显示阴影
  62. /// </summary>
  63. public bool ShowShadow
  64. {
  65. get { return (bool)GetValue(ShowShadowProperty); }
  66. set { SetValue(ShowShadowProperty, value); }
  67. }
  68. public static readonly DependencyProperty ShadowBlurProperty = DependencyProperty.Register("ShadowBlur"
  69. , typeof(Thickness), typeof(NumberBox));
  70. /// <summary>
  71. /// 阴影的显示方向
  72. /// </summary>
  73. public Thickness ShadowBlur
  74. {
  75. get { return (Thickness)GetValue(ShadowBlurProperty); }
  76. set { SetValue(ShadowBlurProperty, value); }
  77. }
  78. #endregion
  79. public override void OnApplyTemplate()
  80. {
  81. base.OnApplyTemplate();
  82. List<int> list = new List<int>();
  83. for (int i = StartNumber; i <= EndNumber; i++)
  84. {
  85. list.Add(i);
  86. }
  87. this.ItemsSource = list;
  88. }
  89. protected override DependencyObject GetContainerForItemOverride()
  90. {
  91. var item = new NumberBoxItem();
  92. item.OnItemSingleClickHandler += Item_OnClickHandler;
  93. return item;
  94. }
  95. private void Item_OnClickHandler(object sender, ItemMouseSingleClickEventArgs<object> e)
  96. {
  97. NumberBoxItem item = sender as NumberBoxItem;
  98. this.SelectedItem = item.Content;
  99. }
  100. }
  101. /// <summary>
  102. /// 重写ListViewItem,定义行单击、双击事件
  103. /// </summary>
  104. public class NumberBoxItem : System.Windows.Controls.ComboBoxItem
  105. {
  106. #region 事件
  107. /// <summary>
  108. /// Item单击事件
  109. /// </summary>
  110. public event EventHandler<ItemMouseSingleClickEventArgs<object>> OnItemSingleClickHandler;
  111. #endregion
  112. protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
  113. {
  114. var selectedItem = ((System.Windows.FrameworkElement)e.OriginalSource).DataContext;
  115. this.OnItemSingleClickHandler(this, ItemMouseSingleClickEventArgs<object>.ItemSingleClick(selectedItem));
  116. base.OnMouseLeftButtonDown(e);
  117. }
  118. }
  119. }