If I set up time any value differs from 0:00 and then try to select day in the next month

calendar skip this month and go to the next.
For example, if I try select date November 8, 2015 selected date will be December 6, 2015.
We have two changes (current month is October): one in November and one in Decmber.
It happend becouse date changing twice: one time when mouse down occurs and one when occurs mouse up. The result view is:

In the text field we see the correct month,

but in the calendar view there is December.

What can I do?
Comments: ** Comment from web user: wizzard2012 **
the bug is here
protected override void OnValueChanged( DateTime? oldValue, DateTime? newValue )
{
if( _calendar != null && _calendar.SelectedDate != newValue )
{
_calendar.SelectedDate = newValue;
_calendar.DisplayDate = newValue; // see coments later
}
base.OnValueChanged( oldValue, newValue );
}
and here
private void Calendar_SelectedDatesChanged( object sender, SelectionChangedEventArgs e )
{
if( e.AddedItems.Count > 0 )
{
var newDate = ( DateTime? )e.AddedItems[ 0 ];
if( ( Value != null ) && ( newDate != null ) && newDate.HasValue )
{
// Only change the year, month, and day part of the value. Keep everything to the last "tick."
// "Milliseconds" aren't precise enough. Use a mathematical scheme instead.
newDate = newDate.Value.Date + Value.Value.TimeOfDay;
}
if( !object.Equals( newDate, Value ) )
Value = newDate;
}
}
When user clicks on grayed date SelectedDatesChanged occurs. It change Value member of control.
And thus OnValueChanged event handler works. Then
_calendar.DisplayDate
assign new value to display date for swich to correct month. But now, inside calendar OnDisplayDateChanged event ocurs, which overdraw month pane. And when user release mouse button Cell_MouseUp event occurs in calendar that updates calendar again.
The workaround is to modify UpDown control to limit user in hours / minutes change.