将WPF日期选择器的默认日期设置为当前日期

时间:2010-09-07 20:35:06

标签: wpf datepicker

我有一个WPF Datagrid,其中一列是日期列。

所以我使用了DataTemplateColumn作为Follows

<my:DataGridTemplateColumn
    CellTemplate="{StaticResource EffDateDateTimePickerControl}"
    CellEditingTemplate="{StaticResource addrEffDate}"
    Header="Effective Date"/>

在我的资源文件中,我编写了以下代码:

<Style TargetType="{x:Type my:Calendar}" x:Key="CalenderControlTemplate">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="my:Calendar" >
                <my:CalendarItem Name="myCalendarItem" 
                                 Background="White" 
                                 BorderBrush="Black"
                                 BorderThickness="1"
                                 VerticalAlignment="Center" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style> 

<DataTemplate x:Key="EffDateDateTimePickerControl">
    <Label x:Name="lblEffDate" Content="{Binding effectiveDate,Mode=TwoWay}" ></Label>
</DataTemplate>

<DataTemplate x:Key="addrEffDate">
    <my:DatePicker x:Name="dpEffDate" Text="{Binding Path=effectiveDate,Mode=TwoWay}"
                   SelectedDate="{Binding Now}" DisplayDateStart="{Binding Now}"
                   CalendarStyle="{DynamicResource CalenderControlTemplate}" />
</DataTemplate>

问题是当我点击DatePicker控件时,默认日期设置为1/1/0001?

如何设置我的日期选择器以设置为当前日期。

3 个答案:

答案 0 :(得分:18)

除非您的DataContext Now中有属性Bindings,否则您的{x:Static}将失败。相反,您应该使用<DataTemplate x:Key="addrEffDate"> <my:DatePicker x:Name="dpEffDate" Text="{Binding Path=effectiveDate,Mode=TwoWay}" SelectedDate="{x:Static sys:DateTime.Now}" DisplayDateStart="{x:Static sys:DateTime.Now}" CalendarStyle="{DynamicResource CalenderControlTemplate}" /> </DataTemplate> 语法,如下所示:

DateTime

由于<UserControl xmlns:sys="clr-namespace:System;assembly=mscorlib" ... 不在标准XAML名称空间中,因此需要向根元素添加xmlns声明:

{{1}}

答案 1 :(得分:1)

我认为你需要更换

DisplayDateStart

DisplayDate

因为DisplayDateStart :(来自MSDN)

  

获取或设置要显示的第一个日期。

不是要显示的日期。

答案 2 :(得分:0)

Abe Heidebrecht的答案之上我提供了一个例子。我认为安倍的回答是正确的。我遇到了与新对象和类绑定相同的问题,并以下面提到的方式解决了问题:

 get
 {
  return (ClassDate - DateTime.MinValue).TotalDays == 0 ? DateTime.Now :ClassDate;
 }
欢呼:)