我正在使用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();
}
}
}
结果:
正如你所看到的那样,日历是在没有显示任何年份信息的情况下渲染的。
如果我不使用网格定义,Displaymode=Year
或this.DataContext =...
一切都会正确呈现。
这是XAML中的错误吗?
答案 0 :(得分:4)
由于这个问题已经被问了一年多,但仍然没有任何接受的答案,所以我想就如何摆脱这个错误做出贡献。
我将我的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;
}
首次将显示模式更改为Year需要加载事件,并且需要DisplayModeChanged事件,以便在选择更改时在后续调用中更改它。
我希望将来有人帮助。