/// <summary> /// SelectedDateProperty property changed handler. /// </summary> /// <param name="d">DatePicker that changed its SelectedDate.</param> /// <param name="e">DependencyPropertyChangedEventArgs.</param> private static void OnSelectedDateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { DatePicker dp = d as DatePicker; Debug.Assert(dp != null); Collection <DateTime> addedItems = new Collection <DateTime>(); Collection <DateTime> removedItems = new Collection <DateTime>(); DateTime?addedDate; DateTime?removedDate; dp.CoerceValue(DisplayDateStartProperty); dp.CoerceValue(DisplayDateEndProperty); dp.CoerceValue(DisplayDateProperty); addedDate = (DateTime?)e.NewValue; removedDate = (DateTime?)e.OldValue; if (dp.SelectedDate.HasValue) { DateTime day = dp.SelectedDate.Value; dp.SetTextInternal(dp.DateTimeToString(day)); // When DatePickerDisplayDateFlag is TRUE, the SelectedDate change is coming from the Calendar UI itself, // so, we shouldn't change the DisplayDate since it will automatically be changed by the Calendar if ((day.Month != dp.DisplayDate.Month || day.Year != dp.DisplayDate.Year) && !dp._calendar.DatePickerDisplayDateFlag) { dp.SetCurrentValueInternal(DisplayDateProperty, day); } dp._calendar.DatePickerDisplayDateFlag = false; } else { dp.SetWaterMarkText(); } if (addedDate.HasValue) { addedItems.Add(addedDate.Value); } if (removedDate.HasValue) { removedItems.Add(removedDate.Value); } dp.OnSelectedDateChanged(new CalendarSelectionChangedEventArgs(DatePicker.SelectedDateChangedEvent, removedItems, addedItems)); DatePickerAutomationPeer peer = UIElementAutomationPeer.FromElement(dp) as DatePickerAutomationPeer; // Raise the propetyChangeEvent for Value if Automation Peer exist if (peer != null) { string addedDateString = addedDate.HasValue ? dp.DateTimeToString(addedDate.Value) : ""; string removedDateString = removedDate.HasValue ? dp.DateTimeToString(removedDate.Value) : ""; peer.RaiseValuePropertyChangedEvent(removedDateString, addedDateString); } }
/// <summary> /// TextProperty property changed handler. /// </summary> /// <param name="d">DatePicker that changed its Text.</param> /// <param name="e">DependencyPropertyChangedEventArgs.</param> private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { DatePicker dp = d as DatePicker; Debug.Assert(dp != null); if (!dp.IsHandlerSuspended(DatePicker.TextProperty)) { string newValue = e.NewValue as string; if (newValue != null) { if (dp._textBox != null) { dp._textBox.Text = newValue; } else { dp._defaultText = newValue; } dp.SetSelectedDate(); } else { dp.SetValueNoCallback(DatePicker.SelectedDateProperty, null); } } DatePickerAutomationPeer peer = UIElementAutomationPeer.FromElement(dp) as DatePickerAutomationPeer; // Raise the propetyChangeEvent for Value if Automation Peer exist if (peer != null) { peer.RaiseValuePropertyChangedEvent((string)e.OldValue, (string)e.NewValue); } }
public void DatePicker_AutomationPeer() { _elementToCleanUp = new DatePicker(); _isLoaded = false; DatePickerAutomationPeer datePickerAutomationPeer = (DatePickerAutomationPeer)DatePickerAutomationPeer.CreatePeerForElement(_elementToCleanUp); Assert.IsNotNull(datePickerAutomationPeer); DateTime date = new DateTime(2000, 2, 2); _elementToCleanUp.SelectedDate = date; _elementToCleanUp.Height = 30; _elementToCleanUp.Width = 100; _elementToCleanUp.Loaded += new RoutedEventHandler(_elementToCleanUp_Loaded); TestPanel.Children.Add(_elementToCleanUp); EnqueueConditional(IsLoaded); DateTime date2 = new DateTime(2000, 5, 5); EnqueueCallback(delegate { Assert.AreEqual(datePickerAutomationPeer.GetAutomationControlType(), AutomationControlType.ComboBox, "Incorrect Control type for datepicker"); Assert.AreEqual(datePickerAutomationPeer.GetClassName(), _elementToCleanUp.GetType().Name, "Incorrect ClassName value for datepicker"); Assert.AreEqual(datePickerAutomationPeer.GetName(), date.ToString(), "Incorrect Name value for datepickerpeer"); Assert.IsTrue(datePickerAutomationPeer.IsContentElement(), "Incorrect IsContentElement value"); Assert.IsTrue(datePickerAutomationPeer.IsControlElement(), "Incorrect IsControlElement value"); #region DatePickerAutomationPeer IExpandCollapseProvider tests: IExpandCollapseProvider datePickerExpandCollapseProvider = ((IExpandCollapseProvider)datePickerAutomationPeer.GetPattern(PatternInterface.ExpandCollapse)); Assert.IsNotNull(datePickerAutomationPeer); Assert.AreEqual(datePickerExpandCollapseProvider.ExpandCollapseState, ExpandCollapseState.Collapsed); _elementToCleanUp.IsDropDownOpen = true; Assert.IsTrue(_elementToCleanUp.TestHook.DropDown.IsOpen); Assert.AreEqual(datePickerExpandCollapseProvider.ExpandCollapseState, ExpandCollapseState.Expanded); datePickerExpandCollapseProvider.Collapse(); Assert.AreEqual(datePickerExpandCollapseProvider.ExpandCollapseState, ExpandCollapseState.Collapsed); Assert.IsFalse(_elementToCleanUp.TestHook.DropDown.IsOpen); datePickerExpandCollapseProvider.Expand(); Assert.IsTrue(_elementToCleanUp.TestHook.DropDown.IsOpen); Assert.AreEqual(datePickerExpandCollapseProvider.ExpandCollapseState, ExpandCollapseState.Expanded); datePickerExpandCollapseProvider.Collapse(); #endregion #region DatePickerAutomationPeer IValueProvider tests: IValueProvider datePickerValueProvider = ((IValueProvider)datePickerAutomationPeer.GetPattern(PatternInterface.Value)); Assert.IsNotNull(datePickerValueProvider); Assert.IsFalse(datePickerValueProvider.IsReadOnly); Assert.AreEqual(datePickerValueProvider.Value, date.ToString()); _elementToCleanUp.SelectedDate = null; Assert.AreEqual(datePickerValueProvider.Value, string.Empty); datePickerValueProvider.SetValue(date2.ToString()); Assert.AreEqual(_elementToCleanUp.SelectedDate, date2); Assert.AreEqual(datePickerValueProvider.Value, date2.ToString()); #endregion }); EnqueueSleep(sleepTime); EnqueueCallback(delegate { Assert.AreEqual(_elementToCleanUp.Text, date2.ToString("d")); }); EnqueueTestComplete(); }