private static void OnDisplayModePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Calendar c = d as Calendar;
Debug.Assert(c != null, "c should not be null!");
CalendarMode mode = (CalendarMode) e.NewValue;
CalendarMode oldMode = (CalendarMode) e.OldValue;
CalendarItem monthControl = c.MonthControl;
if (!c.IsHandlerSuspended(Calendar.DisplayModeProperty))
{
if (IsValidDisplayMode(mode))
{
if (monthControl != null)
{
switch (oldMode)
{
case CalendarMode.Month:
{
c.SelectedYear = c.DisplayDateInternal;
c.SelectedMonth = c.DisplayDateInternal;
break;
}
case CalendarMode.Year:
{
c.DisplayDate = c.SelectedMonth;
c.SelectedYear = c.SelectedMonth;
break;
}
case CalendarMode.Decade:
{
c.DisplayDate = c.SelectedYear;
c.SelectedMonth = c.SelectedYear;
break;
}
}
switch (mode)
{
case CalendarMode.Month:
{
c.OnMonthClick();
break;
}
case CalendarMode.Year:
case CalendarMode.Decade:
{
c.OnHeaderClick();
break;
}
}
}
c.OnDisplayModeChanged(new CalendarModeChangedEventArgs((CalendarMode)e.OldValue, mode));
}
else
{
c.SetValueNoCallback(Calendar.DisplayModeProperty, e.OldValue);
throw new ArgumentOutOfRangeException("d", WinRTXamlToolkit.Controls.Properties.Resources.Calendar_OnDisplayModePropertyChanged_InvalidValue);
}
}
}