/// <summary>
        /// TimeGlobalizationInfoProperty property changed handler.
        /// </summary>
        /// <param name="d">TimeUpDown that changed its TimeGlobalizationInfo.</param>
        /// <param name="e">Event arguments.</param>
        private static void OnTimeGlobalizationInfoPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            TimePickerPopup       source   = (TimePickerPopup)d;
            TimeGlobalizationInfo newValue = e.NewValue as TimeGlobalizationInfo;

            // potentially flow back to parent.
            if (source.TimePickerParent != null && source.TimePickerParent.TimeGlobalizationInfo != newValue)
            {
                source.TimePickerParent.SetValue(TimePicker.TimeGlobalizationInfoProperty, newValue);
            }

            if (newValue != null)
            {
                newValue.Culture = source.Culture;
                source._actualTimeGlobalizationInfo = null; // no need for default any more.
            }

            source.OnTimeGlobalizationInfoChanged(e.OldValue as TimeGlobalizationInfo, newValue);
        }
 /// <summary>
 /// Called when the time globalization info changed.
 /// </summary>
 /// <param name="oldValue">The old value.</param>
 /// <param name="newValue">The new value.</param>
 protected virtual void OnTimeGlobalizationInfoChanged(TimeGlobalizationInfo oldValue, TimeGlobalizationInfo newValue)
 {
 }
 /// <summary>
 /// Called when the time globalization info changed.
 /// </summary>
 /// <param name="oldValue">The old value.</param>
 /// <param name="newValue">The new value.</param>
 protected virtual void OnTimeGlobalizationInfoChanged(TimeGlobalizationInfo oldValue, TimeGlobalizationInfo newValue)
 {
 }