Easiest solution I found was a combination of
private void dp_CalendarOpened(object sender, RoutedEventArgs e)
{
DatePicker dp = (DatePicker)sender;
Popup popup = (Popup)dp.Template.FindName("PART_Popup", dp);
Calendar cal = (Calendar)popup.Child;
cal.DisplayMode = CalendarMode.Year;
cal.DisplayModeChanged += cal_DisplayModeChanged;
}
private void cal_DisplayModeChanged(object sender, CalendarModeChangedEventArgs e)
{
Calendar calendar = (Calendar)sender;
Popup popup = (Popup)calendar.Parent;
if (e.NewMode == CalendarMode.Month)
{
//calendar.DisplayMode = e.OldMode;
calendar.SelectedDate = calendar.DisplayDate.AddDays((calendar.DisplayDate.Day * -1) + 1).AddMonths(1).AddDays(-1);
popup.IsOpen = false;
calendar.DisplayModeChanged -= cal_DisplayModeChanged;
}
}