diff --git a/demo/Ursa.Demo/Pages/DateTimePickerDemo.axaml b/demo/Ursa.Demo/Pages/DateTimePickerDemo.axaml
new file mode 100644
index 0000000..35c8004
--- /dev/null
+++ b/demo/Ursa.Demo/Pages/DateTimePickerDemo.axaml
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/demo/Ursa.Demo/Pages/DateTimePickerDemo.axaml.cs b/demo/Ursa.Demo/Pages/DateTimePickerDemo.axaml.cs
new file mode 100644
index 0000000..2740132
--- /dev/null
+++ b/demo/Ursa.Demo/Pages/DateTimePickerDemo.axaml.cs
@@ -0,0 +1,13 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace Ursa.Demo.Pages;
+
+public partial class DateTimePickerDemo : UserControl
+{
+ public DateTimePickerDemo()
+ {
+ InitializeComponent();
+ }
+}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/ViewModels/DateTimePickerDemoViewModel.cs b/demo/Ursa.Demo/ViewModels/DateTimePickerDemoViewModel.cs
new file mode 100644
index 0000000..637f9ae
--- /dev/null
+++ b/demo/Ursa.Demo/ViewModels/DateTimePickerDemoViewModel.cs
@@ -0,0 +1,6 @@
+namespace Ursa.Demo.ViewModels;
+
+public class DateTimePickerDemoViewModel
+{
+
+}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
index 87a92ac..d4af1cb 100644
--- a/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/MainViewViewModel.cs
@@ -36,6 +36,7 @@ public class MainViewViewModel : ViewModelBase
MenuKeys.MenuKeyClassInput => new ClassInputDemoViewModel(),
MenuKeys.MenuKeyClock => new ClockDemoViewModel(),
MenuKeys.MenuKeyDatePicker => new DatePickerDemoViewModel(),
+ MenuKeys.MenuKeyDateTimePicker => new DateTimePickerDemoViewModel(),
MenuKeys.MenuKeyDialog => new DialogDemoViewModel(),
MenuKeys.MenuKeyDivider => new DividerDemoViewModel(),
MenuKeys.MenuKeyDisableContainer => new DisableContainerDemoViewModel(),
diff --git a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
index bf9bb6e..742989c 100644
--- a/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
+++ b/demo/Ursa.Demo/ViewModels/MenuViewModel.cs
@@ -21,6 +21,7 @@ public class MenuViewModel: ViewModelBase
new() { MenuHeader = "Class Input", Key = MenuKeys.MenuKeyClassInput },
new() { MenuHeader = "Clock", Key = MenuKeys.MenuKeyClock, Status = "Updated" },
new() { MenuHeader = "Date Picker", Key = MenuKeys.MenuKeyDatePicker, Status = "New"},
+ new() { MenuHeader = "Date Time Picker", Key = MenuKeys.MenuKeyDateTimePicker, Status = "New"},
new() { MenuHeader = "Dialog", Key = MenuKeys.MenuKeyDialog },
new() { MenuHeader = "Disable Container", Key = MenuKeys.MenuKeyDisableContainer },
new() { MenuHeader = "Divider", Key = MenuKeys.MenuKeyDivider },
@@ -71,6 +72,7 @@ public static class MenuKeys
public const string MenuKeyClassInput = "Class Input";
public const string MenuKeyClock = "Clock";
public const string MenuKeyDatePicker = "DatePicker";
+ public const string MenuKeyDateTimePicker = "DateTimePicker";
public const string MenuKeyDialog = "Dialog";
public const string MenuKeyDivider = "Divider";
public const string MenuKeyDisableContainer = "DisableContainer";
diff --git a/src/Ursa.Themes.Semi/Controls/DateTimePicker.axaml b/src/Ursa.Themes.Semi/Controls/DateTimePicker.axaml
new file mode 100644
index 0000000..ad0d82f
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Controls/DateTimePicker.axaml
@@ -0,0 +1,141 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Ursa.Themes.Semi/Controls/_index.axaml b/src/Ursa.Themes.Semi/Controls/_index.axaml
index bec20a1..de5d6f3 100644
--- a/src/Ursa.Themes.Semi/Controls/_index.axaml
+++ b/src/Ursa.Themes.Semi/Controls/_index.axaml
@@ -12,6 +12,7 @@
+
diff --git a/src/Ursa/Controls/DateTimePicker/CalendarView.cs b/src/Ursa/Controls/DateTimePicker/CalendarView.cs
index 672d15c..faf5705 100644
--- a/src/Ursa/Controls/DateTimePicker/CalendarView.cs
+++ b/src/Ursa/Controls/DateTimePicker/CalendarView.cs
@@ -118,8 +118,17 @@ public class CalendarView : TemplatedControl
get => GetValue(FirstDayOfWeekProperty);
set => SetValue(FirstDayOfWeekProperty, value);
}
-
- public event EventHandler? DateSelected;
+
+ public static readonly RoutedEvent DateSelectedEvent =
+ RoutedEvent.Register(
+ nameof(DateSelected), RoutingStrategies.Bubble);
+
+ public event EventHandler DateSelected
+ {
+ add => AddHandler(DateSelectedEvent, value);
+ remove => RemoveHandler(DateSelectedEvent, value);
+ }
+
public event EventHandler? DatePreviewed;
internal event EventHandler? ContextDateChanged;
@@ -420,7 +429,7 @@ public class CalendarView : TemplatedControl
ContextDate = ContextDate.With(year: e.Date.Value.Year, month: e.Date.Value.Month);
UpdateDayButtons();
}
- DateSelected?.Invoke(this, e);
+ RaiseEvent(new CalendarDayButtonEventArgs(e.Date) { RoutedEvent = DateSelectedEvent, Source = this });
}
///
@@ -531,6 +540,7 @@ public class CalendarView : TemplatedControl
public void MarkDates(DateTime? startDate = null, DateTime? endDate = null, DateTime? previewStartDate = null, DateTime? previewEndDate = null)
{
+ Debug.WriteLine( startDate + " " + endDate + " " + previewStartDate + " " + previewEndDate);
_start = startDate;
_end = endDate;
_previewStart = previewStartDate;
diff --git a/src/Ursa/Controls/DateTimePicker/DatePicker.cs b/src/Ursa/Controls/DateTimePicker/DatePicker.cs
index 06a1296..69da5b5 100644
--- a/src/Ursa/Controls/DateTimePicker/DatePicker.cs
+++ b/src/Ursa/Controls/DateTimePicker/DatePicker.cs
@@ -63,10 +63,7 @@ public class DatePicker: DatePickerBase, IClearControl
TextBox.TextChangedEvent.RemoveHandler(OnTextChanged, _textBox);
PointerPressedEvent.RemoveHandler(OnTextBoxPointerPressed, _textBox);
Button.ClickEvent.RemoveHandler(OnButtonClick, _button);
- if (_calendar != null)
- {
- _calendar.DateSelected -= OnDateSelected;
- }
+ CalendarView.DateSelectedEvent.RemoveHandler(OnDateSelected, _calendar);
_button = e.NameScope.Find