| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- using Microsoft.Xaml.Behaviors;
- 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.Input;
- namespace TeamAAS_VP.Behaviors
- {
- public class DatePickerUserSelectionBehavior : Behavior<DatePicker>
- {
- public static readonly DependencyProperty UserSelectionCommandProperty =
- DependencyProperty.Register(
- nameof(UserSelectionCommand),
- typeof(ICommand),
- typeof(DatePickerUserSelectionBehavior));
- public ICommand UserSelectionCommand
- {
- get => (ICommand)GetValue(UserSelectionCommandProperty);
- set => SetValue(UserSelectionCommandProperty, value);
- }
- public static readonly DependencyProperty CommandParameterProperty =
- DependencyProperty.Register(
- nameof(CommandParameter),
- typeof(object),
- typeof(DatePickerUserSelectionBehavior));
- public object CommandParameter
- {
- get => GetValue(CommandParameterProperty);
- set => SetValue(CommandParameterProperty, value);
- }
- private bool _isUserInteraction = false;
- private DateTime? _previousDate;
- protected override void OnAttached()
- {
- base.OnAttached();
- AssociatedObject.PreviewMouseDown += OnPreviewMouseDown;
- AssociatedObject.CalendarOpened += OnCalendarOpened;
- AssociatedObject.SelectedDateChanged += OnSelectedDateChanged;
- }
- protected override void OnDetaching()
- {
- base.OnDetaching();
- AssociatedObject.PreviewMouseDown -= OnPreviewMouseDown;
- AssociatedObject.CalendarOpened -= OnCalendarOpened;
- AssociatedObject.SelectedDateChanged -= OnSelectedDateChanged;
- }
- private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
- {
- _isUserInteraction = true;
- _previousDate = AssociatedObject.SelectedDate;
- }
- private void OnCalendarOpened(object sender, RoutedEventArgs e)
- {
- _isUserInteraction = true;
- _previousDate = AssociatedObject.SelectedDate;
- }
- private void OnSelectedDateChanged(object sender, SelectionChangedEventArgs e)
- {
- if (_isUserInteraction && UserSelectionCommand?.CanExecute(CommandParameter) == true)
- {
- var parameter = new Tuple<object, DateTime?, DateTime?>(
- CommandParameter,
- _previousDate,
- AssociatedObject.SelectedDate);
- UserSelectionCommand.Execute(parameter);
- }
- _isUserInteraction = false;
- }
- }
- }
|