diff --git a/src/MahApps.Metro/Controls/TimePicker/DateTimePicker.cs b/src/MahApps.Metro/Controls/TimePicker/DateTimePicker.cs
index b5b2b5797b..c141cd59b6 100644
--- a/src/MahApps.Metro/Controls/TimePicker/DateTimePicker.cs
+++ b/src/MahApps.Metro/Controls/TimePicker/DateTimePicker.cs
@@ -45,6 +45,11 @@ static DateTimePicker()
IsClockVisibleProperty.OverrideMetadata(typeof(DateTimePicker), new PropertyMetadata(OnClockVisibilityChanged));
}
+ public DateTimePicker()
+ {
+ this.SetCurrentValue(DisplayDateProperty, DateTime.Today);
+ }
+
///
protected override void FocusElementAfterIsDropDownOpenChanged()
{
@@ -151,7 +156,7 @@ public override void OnApplyTemplate()
{
_calendar.PreviewKeyDown -= this.CalendarPreviewKeyDown;
_calendar.DisplayDateChanged -= this.CalendarDisplayDateChanged;
- _calendar.SelectedDatesChanged -= CalendarSelectedDateChanged;
+ _calendar.SelectedDatesChanged -= this.CalendarSelectedDateChanged;
_calendar.PreviewMouseUp -= CalendarPreviewMouseUp;
}
@@ -163,7 +168,7 @@ public override void OnApplyTemplate()
{
_calendar.PreviewKeyDown += this.CalendarPreviewKeyDown;
_calendar.DisplayDateChanged += this.CalendarDisplayDateChanged;
- _calendar.SelectedDatesChanged += CalendarSelectedDateChanged;
+ _calendar.SelectedDatesChanged += this.CalendarSelectedDateChanged;
_calendar.PreviewMouseUp += CalendarPreviewMouseUp;
_calendar.SetBinding(Calendar.SelectedDateProperty, GetBinding(SelectedDateTimeProperty));
@@ -175,7 +180,7 @@ public override void OnApplyTemplate()
_calendar.SetBinding(FlowDirectionProperty, GetBinding(FlowDirectionProperty));
}
- SetDatePartValues();
+ //SetDatePartValues();
}
private static void CalendarPreviewMouseUp(object sender, MouseButtonEventArgs e)
@@ -257,13 +262,6 @@ protected override string GetValueForTextBox()
return valueForTextBox;
}
- protected override void OnRangeBaseValueChanged(object sender, SelectionChangedEventArgs e)
- {
- base.OnRangeBaseValueChanged(sender, e);
-
- SetDatePartValues();
- }
-
protected override void OnTextBoxLostFocus(object sender, RoutedEventArgs e)
{
if (!(sender is DatePickerTextBox textBox))
@@ -311,14 +309,36 @@ private static void OnClockVisibilityChanged(DependencyObject d, DependencyPrope
d.CoerceValue(OrientationProperty);
}
- private static void CalendarSelectedDateChanged(object sender, SelectionChangedEventArgs e)
+ private void CalendarSelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
+ if (e.AddedItems.Count > 0 && this.SelectedDateTime.HasValue && DateTime.Compare((DateTime)e.AddedItems[0], this.SelectedDateTime.Value) != 0)
+ {
+ this.SetCurrentValue(SelectedDateTimeProperty, (DateTime?)e.AddedItems[0] + this.GetSelectedTimeFromGUI());
+ }
+ else
+ {
+ if (e.AddedItems.Count == 0)
+ {
+ this.SetCurrentValue(SelectedDateTimeProperty, (DateTime?)null);
+ return;
+ }
+
+ if (!this.SelectedDateTime.HasValue)
+ {
+ if (e.AddedItems.Count > 0)
+ {
+ this.SetCurrentValue(SelectedDateTimeProperty, (DateTime?)e.AddedItems[0] + this.GetSelectedTimeFromGUI());
+ }
+ }
+ }
+
+ /*
var dateTimePicker = (DateTimePicker)((Calendar)sender).TemplatedParent;
- /* Without deactivating changing SelectedTime would callbase.OnSelectedTimeChanged.
- * This would write too and this would result in duplicate writing.
- * More problematic would be instead that a short amount of time SelectedTime would be as value in TextBox
- */
+ // Without deactivating changing SelectedTime would callbase.OnSelectedTimeChanged.
+ // This would write too and this would result in duplicate writing.
+ // More problematic would be instead that a short amount of time SelectedTime would be as value in TextBox
+
dateTimePicker._deactivateWriteValueToTextBox = true;
var dt = e.AddedItems.Count > 0 ? (DateTime?)e.AddedItems[0] : default;
@@ -334,6 +354,17 @@ private static void CalendarSelectedDateChanged(object sender, SelectionChangedE
dateTimePicker._deactivateWriteValueToTextBox = false;
dateTimePicker.WriteValueToTextBox();
+ */
+ }
+
+ protected override void ClockSelectedTimeChanged(object sender, SelectionChangedEventArgs e)
+ {
+ var time = this.GetSelectedTimeFromGUI() ?? TimeSpan.Zero;
+ var date = SelectedDateTime ?? DateTime.Today;
+
+ this.SetCurrentValue(SelectedDateTimeProperty, date.Date + time);
+
+ //SetDatePartValues();
}
private DateTime? GetSelectedDateTimeFromGUI()
diff --git a/src/MahApps.Metro/Controls/TimePicker/TimePicker.cs b/src/MahApps.Metro/Controls/TimePicker/TimePicker.cs
index 420ab816ae..952282c41e 100644
--- a/src/MahApps.Metro/Controls/TimePicker/TimePicker.cs
+++ b/src/MahApps.Metro/Controls/TimePicker/TimePicker.cs
@@ -1,5 +1,6 @@
using System;
using System.Windows;
+using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Threading;
@@ -40,6 +41,14 @@ protected override void FocusElementAfterIsDropDownOpenChanged()
});
}
+ protected override void ClockSelectedTimeChanged(object sender, SelectionChangedEventArgs e)
+ {
+ var time = this.GetSelectedTimeFromGUI() ?? TimeSpan.Zero;
+ var date = SelectedDateTime ?? DateTime.Today;
+
+ this.SetCurrentValue(SelectedDateTimeProperty, date.Date + time);
+ }
+
protected override void OnTextBoxLostFocus(object sender, RoutedEventArgs e)
{
if (!(sender is DatePickerTextBox textBox))
diff --git a/src/MahApps.Metro/Controls/TimePicker/TimePickerBase.cs b/src/MahApps.Metro/Controls/TimePicker/TimePickerBase.cs
index 5ff506e0a0..3e1bf2b142 100644
--- a/src/MahApps.Metro/Controls/TimePicker/TimePickerBase.cs
+++ b/src/MahApps.Metro/Controls/TimePicker/TimePickerBase.cs
@@ -519,13 +519,7 @@ protected virtual string GetValueForTextBox()
protected abstract void OnTextBoxLostFocus(object sender, RoutedEventArgs e);
- protected virtual void OnRangeBaseValueChanged(object sender, SelectionChangedEventArgs e)
- {
- // If we do not have a date yet we should use Today instead of DateTime.Min
- var newDateTime = SelectedDateTime ?? DateTime.Today;
-
- this.SetCurrentValue(SelectedDateTimeProperty, newDateTime.Date + this.GetSelectedTimeFromGUI());
- }
+ protected abstract void ClockSelectedTimeChanged(object sender, SelectionChangedEventArgs e);
protected virtual void OnSelectedTimeChanged(TimePickerBaseSelectionChangedEventArgs e)
{
@@ -739,7 +733,7 @@ private void TimePickerSelectionChanged(object sender, SelectionChangedEventArgs
{
if (!_deactivateRangeBaseEvent)
{
- OnRangeBaseValueChanged(sender, e);
+ this.ClockSelectedTimeChanged(sender, e);
}
}
@@ -876,7 +870,7 @@ private static void SetDefaultTimeOfDayValue(Selector selector)
return new TimeSpan(hours, minutes, seconds);
}
- return this.SelectedDateTime.GetValueOrDefault().TimeOfDay;
+ return null; //this.SelectedDateTime.GetValueOrDefault().TimeOfDay;
}
}