using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Controls.Primitives; using System.Windows.Input; namespace XGL.Tools { public class UserDatePicker : DatePicker { //日期文本框 private DatePickerTextBox textBox; private Popup popup; //今天 private TextBlock goToday; //清空 private TextBlock goClear; #region 重载初始化 public override void OnApplyTemplate() { base.OnApplyTemplate(); textBox = this.GetTemplateChild("PART_TextBox") as DatePickerTextBox; popup = this.GetTemplateChild("PART_Popup") as Popup; popup.Width = 300; popup.Height = 300; if (AlternativeCalendarStyle != null) { System.Windows.Controls.Calendar calendar = popup.Child as System.Windows.Controls.Calendar; calendar.Style = AlternativeCalendarStyle; calendar.ApplyTemplate(); goToday = calendar.Template.FindName("PART_GoToday", calendar) as TextBlock; if (goToday != null) { goToday.MouseLeftButtonUp -= new MouseButtonEventHandler(goToday_MouseLeftButtonUp); goToday.MouseLeftButtonUp += new MouseButtonEventHandler(goToday_MouseLeftButtonUp); } goClear = calendar.Template.FindName("PART_GoClear", calendar) as TextBlock; if (goClear != null) { goClear.MouseLeftButtonUp -= new MouseButtonEventHandler(goClear_MouseLeftButtonUp); goClear.MouseLeftButtonUp += new MouseButtonEventHandler(goClear_MouseLeftButtonUp); } } this.SelectedDateFormat = DatePickerFormat.Short; } #endregion /// /// AlternativeCalendarStyle Dependency Property /// public static readonly DependencyProperty AlternativeCalendarStyleProperty = DependencyProperty.Register("AlternativeCalendarStyle", typeof(Style), typeof(UserDatePicker), new FrameworkPropertyMetadata((Style)null, null)); public Style AlternativeCalendarStyle { get { return (Style)GetValue(AlternativeCalendarStyleProperty); } set { SetValue(AlternativeCalendarStyleProperty, value); } } #region 今天 private void goToday_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { this.SelectedDate = DateTime.Now; popup.IsOpen = false; } #endregion #region 清空 private void goClear_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { this.SelectedDate = null; popup.IsOpen = false; } #endregion } }