diff --git a/demo/Ursa.Demo/Pages/DateTimePickerDemo.axaml b/demo/Ursa.Demo/Pages/DateTimePickerDemo.axaml
new file mode 100644
index 0000000..4f863eb
--- /dev/null
+++ b/demo/Ursa.Demo/Pages/DateTimePickerDemo.axaml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
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..7b55698
--- /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.Themes.Semi/Themes/Shared/DateTimePicker.axaml b/src/Ursa.Themes.Semi/Themes/Shared/DateTimePicker.axaml
new file mode 100644
index 0000000..1ff3483
--- /dev/null
+++ b/src/Ursa.Themes.Semi/Themes/Shared/DateTimePicker.axaml
@@ -0,0 +1,5 @@
+
+
+ M2 5V19C2 20.6569 3.34315 22 5 22H12.101C11.5151 21.4259 11.0297 20.7496 10.6736 20H6C4.89543 20 4 19.1046 4 18V8C4 7.44772 4.44772 7 5 7H19C19.5523 7 20 7.44772 20 8V10.6736C20.7496 11.0297 21.4259 11.5151 22 12.101V5C22 3.34315 20.6569 2 19 2H5C3.34315 2 2 3.34315 2 5Z, M16 10H17C16.4614 10 15.9369 10.0608 15.4332 10.176C15.5943 10.065 15.7896 10 16 10Z, M13.4981 10.9376C13.4659 10.4144 13.0313 10 12.5 10H11.5C10.9477 10 10.5 10.4477 10.5 11V12C10.5 12.4742 10.83 12.8712 11.2729 12.9741C11.857 12.1446 12.6168 11.4478 13.4981 10.9376Z, M7 10C6.44772 10 6 10.4477 6 11V12C6 12.5523 6.44772 13 7 13H8C8.55228 13 9 12.5523 9 12V11C9 10.4477 8.55228 10 8 10H7Z, M6 16C6 15.4477 6.44772 15 7 15H8C8.55228 15 9 15.4477 9 16V17C9 17.5523 8.55228 18 8 18H7C6.44772 18 6 17.5523 6 17V16Z, M22 17C22 19.7614 19.7614 22 17 22C14.2386 22 12 19.7614 12 17C12 14.2386 14.2386 12 17 12C19.7614 12 22 14.2386 22 17ZM18 15C18 14.4477 17.5523 14 17 14C16.4477 14 16 14.4477 16 15V17C16 17.2652 16.1054 17.5196 16.2929 17.7071L17.7929 19.2071C18.1834 19.5976 18.8166 19.5976 19.2071 19.2071C19.5976 18.8166 19.5976 18.1834 19.2071 17.7929L18 16.5858V15Z
+
diff --git a/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml b/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml
index 835e77a..5b18e6f 100644
--- a/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml
+++ b/src/Ursa.Themes.Semi/Themes/Shared/_index.axaml
@@ -5,6 +5,7 @@
+
diff --git a/src/Ursa/Controls/DateTimePicker/CalendarView.cs b/src/Ursa/Controls/DateTimePicker/CalendarView.cs
index 672d15c..8d37511 100644
--- a/src/Ursa/Controls/DateTimePicker/CalendarView.cs
+++ b/src/Ursa/Controls/DateTimePicker/CalendarView.cs
@@ -81,13 +81,10 @@ public class CalendarView : TemplatedControl
private void OnContextDateChanged(AvaloniaPropertyChangedEventArgs args)
{
- Debug.WriteLine(this.Name + " " + args.NewValue.Value);
if (!_dateContextSyncing)
{
ContextDateChanged?.Invoke(this, args.NewValue.Value);
}
- //UpdateDayButtons();
- //UpdateYearButtons();
}
internal CalendarViewMode Mode
@@ -118,8 +115,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 +426,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 });
}
///
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