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();
}
}
}
Результат: Как вы можете видеть, календарь отображается без всякой годовой информации.
Если я не буду использовать определения 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 - для изменения его при последующих вызовах при изменении выбора.
Я надеюсь, что это поможет кому-то в будущем.