Xaml Calendar DisplayMode="Year" не работает при использовании с Grid.Definitions и DataContext

Я использую календарь в 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>

Код позади:

using ....

namespace Excel2
{
    class SampleModel
    {
    }

    public partial class MainWindow : Window
    {
        public MainWindow()
        {            
            InitializeComponent();
            this.DataContext = new SampleModel();
        }
    }
}

Результат:Режим отображения календаря XAML = ошибка года Как вы можете видеть, календарь отображается без всякой годовой информации.

Если я не буду использовать определения Grid, Displaymode=Year или же this.DataContext =... все отображается правильно.

Это ошибка в XAML?

1 ответ

Решение

Поскольку этот вопрос задавался уже более года и до сих пор не получил какого-либо принятого ответа, я хотел бы рассказать о том, как я избавился от этой ошибки.

Я изменил свой 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;
    }

Загруженное событие требуется для изменения режима отображения в первый раз на Год, а событие DisplayModeChanged - для изменения его при последующих вызовах при изменении выбора.

Я надеюсь, что это поможет кому-то в будущем.

Другие вопросы по тегам