Xaml 日历 DisplayMode="Year" 与 Grid.Definitions 和 DataContext 一起使用时不起作用

Ste*_*fan 5 datacontext grid xaml calendar displaymode

我正在使用日历DisplayMode="Year"this.DataContext = new SampleModel();因此我可以访问模型的属性。然而日历渲染错误(见截图)

代码归结为:Xaml:

<Window x:Class="Excel2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="600" Width="800">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="250"></ColumnDefinition>
            <ColumnDefinition Width="2*"></ColumnDefinition>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="220"></RowDefinition>
            <RowDefinition Height="*"></RowDefinition>
        </Grid.RowDefinitions>

        <Calendar DisplayMode="Year"></Calendar>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

背后代码:

using ....

namespace Excel2
{
    class SampleModel
    {
    }

    public partial class MainWindow : Window
    {
        public MainWindow()
        {            
            InitializeComponent();
            this.DataContext = new SampleModel();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

结果: XAML 日历 Displaymode=年份错误 如您所见,渲染日历时不显示任何年份信息。

如果我不使用网格定义,Displaymode=Year或者this.DataContext =...一切都会正确呈现。

这是 XAML 中的错误吗?

Ali*_*aig 5

由于这个问题已经被问了一年多了,而且仍然没有任何可接受的答案,所以我想为我如何摆脱这个错误做出贡献。

我将我的 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;
    }
Run Code Online (Sandbox Code Playgroud)

第一次将显示模式更改为 Year 需要 Loaded 事件,并且当选择更改时,需要 DisplayModeChanged 事件在后续调用中更改它。

我希望它能帮助将来的人。