从DataTemplate调用的WPF工具包日历问题

时间:2010-12-06 18:02:20

标签: wpf calendar datatemplate toolkit

我注意到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时出错了吗?

1 个答案:

答案 0 :(得分:0)

似乎是日历控件的一个错误。它在加载的事件之前的某个地方重置了控件的DisplayDate.Any方式在Loaded事件中重置它似乎可以解决这个问题。试试这个

private void Calendar_Loaded(object sender, RoutedEventArgs e)

  {

      ((Calendar)sender).DisplayDate = (DateTime) ((Calendar)sender).DataContext;

  }