我使用Xceed DateTimePicker作为绑定到Date属性的所有列的wpf DataGrid中的控件。每个列的定义如下:
<DataGrid.Columns>
<DataGridTemplateColumn
Header="Charge Date"
Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock
Text="{Binding Path=ChargeDate, StringFormat=yyyy-MM-dd, Converter={StaticResource conDate}}"
HorizontalAlignment="Center" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<tk:DateTimePicker Value="{Binding Path=ChargeDate}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
我不认为这与我的问题相关,但为了完整起见,这里是拣货员的造型:
<Style TargetType="{x:Type tk:DateTimePicker}">
<Setter Property="TextAlignment" Value="Center" />
<Setter Property="Minimum" Value="2017-01-01" />
<Setter Property="DisplayDefaultValueOnEmptyText" Value="False" />
<Setter Property="ShowButtonSpinner" Value="False" />
<Setter Property="TimePickerVisibility" Value="Collapsed" />
<Setter Property="AutoCloseCalendar" Value="True" />
<Setter Property="Format" Value="Custom" />
<Setter Property="FormatString" Value="yyyy-MM-dd" />
</Style>
这适用于已填充的数据网格单元格或当我在新行中输入数据时。但是,当我单击现有行中的空单元格时,出现以下异常:
System.ArgumentOutOfRangeException: 'SelectedDate value is not valid.'
为什么只有在现有行中输入数据时才会出现错误?发生此异常时,不会执行代码隐藏,因此我不知道在哪里查找问题。
答案 0 :(得分:1)
由于您已将reload(sys)
sys.setdefaultencoding('euc-kr')
属性设置为Minimum
,因此您还应将默认值设置为相同的日期:
2017-01-01
如果默认值或值小于最小值,您将获得<Style TargetType="{x:Type tk:DateTimePicker}">
<Setter Property="TextAlignment" Value="Center" />
<Setter Property="Default" Value="2017-01-01" />
<Setter Property="Minimum" Value="2017-01-01" />
<Setter Property="DisplayDefaultValueOnEmptyText" Value="False" />
<Setter Property="ShowButtonSpinner" Value="False" />
<Setter Property="TimePickerVisibility" Value="Collapsed" />
<Setter Property="AutoCloseCalendar" Value="True" />
<Setter Property="Format" Value="Custom" />
<Setter Property="FormatString" Value="yyyy-MM-dd" />
</Style>
,这非常有意义。
答案 1 :(得分:1)
我有同样的问题。要解决此问题,请将ClipValueToMinMax属性设置为“ True”。这将防止该值低于最小值/高于最大值而不会引发异常。
<xceed:DateTimePicker Value="{Binding DateTime}"
Minimum="{Binding DateTimeMinimum}"
Maximum="{Binding DateTimeMaximum}"
ClipValueToMinMax="True"/>