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

New*_*per 10 wpf datepicker

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

所以我使用了DataTemplateColumn作为Follows

<my:DataGridTemplateColumn
    CellTemplate="{StaticResource EffDateDateTimePickerControl}"
    CellEditingTemplate="{StaticResource addrEffDate}"
    Header="Effective Date"/>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

Abe*_*cht 19

除非你的DataContext被叫人有财产,否则你NowBindings意志就会失败.相反,您应该使用如下{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>
Run Code Online (Sandbox Code Playgroud)

由于DateTime不在标准XAML命名空间中,因此需要向根元素添加xmlns声明:

<UserControl xmlns:sys="clr-namespace:System;assembly=mscorlib" ...
Run Code Online (Sandbox Code Playgroud)


Chr*_*isF 1

我认为你需要更换

DisplayDateStart
Run Code Online (Sandbox Code Playgroud)

DisplayDate
Run Code Online (Sandbox Code Playgroud)

因为DisplayDateStart:(来自 MSDN)

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

不是要显示的日期。