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;
}