using System; using System.Windows; using System.Windows.Input; using System.Windows.Controls; using System.Collections.Generic; namespace CustomUI.MyControls.Primitives { /// /// 用于日历显示时分秒的控件 /// public class NumberBox : ComboBox { static NumberBox() { DefaultStyleKeyProperty.OverrideMetadata(typeof(NumberBox), new FrameworkPropertyMetadata(typeof(NumberBox))); } #region 依赖属性 public static readonly DependencyProperty StartNumberProperty = DependencyProperty.Register("StartNumber" , typeof(int), typeof(NumberBox)); /// /// 起始数字 /// public int StartNumber { get { return (int)GetValue(StartNumberProperty); } set { SetValue(StartNumberProperty, value); } } public static readonly DependencyProperty EndNumberProperty = DependencyProperty.Register("EndNumber" , typeof(int), typeof(NumberBox)); /// /// 结束数字 /// public int EndNumber { get { return (int)GetValue(EndNumberProperty); } set { SetValue(EndNumberProperty, value); } } public static readonly DependencyProperty TitleProperty = DependencyProperty.Register("Title" , typeof(string), typeof(NumberBox)); /// /// 标题 /// public string Title { get { return (string)GetValue(TitleProperty); } set { SetValue(TitleProperty, value); } } public static readonly DependencyProperty MaxDropDownWidthProperty = DependencyProperty.Register("MaxDropDownWidth" , typeof(double), typeof(NumberBox)); /// /// 弹出框的最大宽度 /// public double MaxDropDownWidth { get { return (double)GetValue(MaxDropDownWidthProperty); } set { SetValue(MaxDropDownWidthProperty, value); } } public static readonly DependencyProperty ShowShadowProperty = DependencyProperty.Register("ShowShadow" , typeof(bool), typeof(NumberBox)); /// /// 是否显示阴影 /// public bool ShowShadow { get { return (bool)GetValue(ShowShadowProperty); } set { SetValue(ShowShadowProperty, value); } } public static readonly DependencyProperty ShadowBlurProperty = DependencyProperty.Register("ShadowBlur" , typeof(Thickness), typeof(NumberBox)); /// /// 阴影的显示方向 /// public Thickness ShadowBlur { get { return (Thickness)GetValue(ShadowBlurProperty); } set { SetValue(ShadowBlurProperty, value); } } #endregion public override void OnApplyTemplate() { base.OnApplyTemplate(); List list = new List(); for (int i = StartNumber; i <= EndNumber; i++) { list.Add(i); } this.ItemsSource = list; } protected override DependencyObject GetContainerForItemOverride() { var item = new NumberBoxItem(); item.OnItemSingleClickHandler += Item_OnClickHandler; return item; } private void Item_OnClickHandler(object sender, ItemMouseSingleClickEventArgs e) { NumberBoxItem item = sender as NumberBoxItem; this.SelectedItem = item.Content; } } /// /// 重写ListViewItem,定义行单击、双击事件 /// public class NumberBoxItem : System.Windows.Controls.ComboBoxItem { #region 事件 /// /// Item单击事件 /// public event EventHandler> OnItemSingleClickHandler; #endregion protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) { var selectedItem = ((System.Windows.FrameworkElement)e.OriginalSource).DataContext; this.OnItemSingleClickHandler(this, ItemMouseSingleClickEventArgs.ItemSingleClick(selectedItem)); base.OnMouseLeftButtonDown(e); } } }