我注意到WPF Toolkit Calendar控件存在严重问题。如果我只使用普通的内联XAML调用它并将DisplayDate设置为日期字符串,它就可以正常工作,如下所示:
<toolkit:Calendar DisplayDate="12/6/2010"/>
但是,当我使用DataTemplate导致显示日历时,它从不尊重DisplayDate参数。这是一个例子:
<UserControl x:Class="Dashboard.Presentation.View.CalendarView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:toolkit="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<UserControl.Resources>
<DataTemplate DataType="{x:Type sys:DateTime}">
<StackPanel Orientation="Vertical">
<toolkit:Calendar DisplayDate="{Binding Path=.}" />
<TextBlock Text="{Binding Path=.}"/>
</StackPanel>
</DataTemplate>
</UserControl.Resources>
<ListBox>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.Items>
<sys:DateTime>11/1/2010</sys:DateTime>
<sys:DateTime>12/1/2010</sys:DateTime>
<sys:DateTime>1/1/2011</sys:DateTime>
<sys:DateTime>2/1/2011</sys:DateTime>
<sys:DateTime>3/1/2011</sys:DateTime>
</ListBox.Items>
</ListBox>
我已经向DataTemplate添加了一个TextBlock,因此您可以看到日期正在被正确绑定,而日历并没有尊重它。
这是WPF工具包日历中的错误吗?如果是这样,我该如何修复?或者这是我在使用DataTemplates时出错了吗?
答案 0 :(得分:0)
似乎是日历控件的一个错误。它在加载的事件之前的某个地方重置了控件的DisplayDate.Any方式在Loaded事件中重置它似乎可以解决这个问题。试试这个
private void Calendar_Loaded(object sender, RoutedEventArgs e)
{
((Calendar)sender).DisplayDate = (DateTime) ((Calendar)sender).DataContext;
}