Xaml日历显示模式=";年份“;与Grid.Definitions和DataContext一起使用时不工作

Xaml日历显示模式=";年份“;与Grid.Definitions和DataContext一起使用时不工作,xaml,calendar,grid,datacontext,displaymode,Xaml,Calendar,Grid,Datacontext,Displaymode,我正在DisplayMode=“Year”和this.DataContext=new SampleModel()中使用日历这样我就可以访问模型的属性。但是,日历呈现错误(请参见屏幕截图) 代码归结为: Xaml: 结果: 如您所见,日历渲染时没有显示任何年份信息 如果不使用网格定义,Displaymode=Year或this.DataContext=…所有内容都正确呈现 这是XAML中的一个bug吗?因为这个问题已经问了一年多了,仍然没有任何公认的答案,所以我想就如何消除这个bug做出贡献 我将

我正在
DisplayMode=“Year”
this.DataContext=new SampleModel()中使用日历这样我就可以访问模型的属性。但是,日历呈现错误(请参见屏幕截图)

代码归结为: Xaml:

结果: 如您所见,日历渲染时没有显示任何年份信息

如果不使用网格定义,
Displaymode=Year
this.DataContext=…
所有内容都正确呈现


这是XAML中的一个bug吗?

因为这个问题已经问了一年多了,仍然没有任何公认的答案,所以我想就如何消除这个bug做出贡献

我将xaml更改为:

 <Calendar Grid.Row="0" Grid.Column="3" x:Name="_calendar" DisplayModeChanged="_calendar_DisplayModeChanged" Loaded="_calendar_OnLoaded"
                          DisplayDate="{Binding SelectedMonth, UpdateSourceTrigger=PropertyChanged}" DisplayMode="Month" />

 //Setting DisplayMode="Month" in xaml and will change it back to "Year" in code behind. so my codebehind code is


    private void _calendar_DisplayModeChanged(object sender, CalendarModeChangedEventArgs e)
    {
        _calendar.DisplayMode = CalendarMode.Year;
    }

    private void _calendar_OnLoaded(object sender, RoutedEventArgs e)
    {
        _calendar.DisplayMode = CalendarMode.Year;
    }

//在xaml中设置DisplayMode=“Month”,并在代码隐藏中将其更改回“Year”。所以我的代码隐藏代码是
private void\u calendar\u DisplayModeChanged(对象发送方,CalendarModeChangedEventArgs e)
{
_calendar.DisplayMode=CalendarMode.Year;
}
私有无效\u日历\u已加载(对象发送方,路由目标)
{
_calendar.DisplayMode=CalendarMode.Year;
}
Loaded event(已加载事件)需要在每年第一次更改显示模式,DisplayModeChanged event(显示模式更改事件)需要在选择更改后的后续调用中更改显示模式


我希望这对将来的人有所帮助。

我不明白你为什么不支持这个答案。我一直在努力实现这一目标,而你是唯一一个有有效解决方案的人。。。谢谢!很高兴它帮助了@SpeulineI如果您有几分钟的时间,您的代码还有另一个问题:经过很长时间,不再使用xaml,我注意到我没有奖励这个答案。请接受我的谢意
using ....

namespace Excel2
{
    class SampleModel
    {
    }

    public partial class MainWindow : Window
    {
        public MainWindow()
        {            
            InitializeComponent();
            this.DataContext = new SampleModel();
        }
    }
}
 <Calendar Grid.Row="0" Grid.Column="3" x:Name="_calendar" DisplayModeChanged="_calendar_DisplayModeChanged" Loaded="_calendar_OnLoaded"
                          DisplayDate="{Binding SelectedMonth, UpdateSourceTrigger=PropertyChanged}" DisplayMode="Month" />

 //Setting DisplayMode="Month" in xaml and will change it back to "Year" in code behind. so my codebehind code is


    private void _calendar_DisplayModeChanged(object sender, CalendarModeChangedEventArgs e)
    {
        _calendar.DisplayMode = CalendarMode.Year;
    }

    private void _calendar_OnLoaded(object sender, RoutedEventArgs e)
    {
        _calendar.DisplayMode = CalendarMode.Year;
    }