Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将无效日期转换为标准默认日期“;1900年1月1日“;wpf日期选择器c#_C#_Wpf_Datepicker - Fatal编程技术网

将无效日期转换为标准默认日期“;1900年1月1日“;wpf日期选择器c#

将无效日期转换为标准默认日期“;1900年1月1日“;wpf日期选择器c#,c#,wpf,datepicker,C#,Wpf,Datepicker,如果我在WPF日期选择器中写入“2018年2月30日”或“2018年9月14日”或任何无效日期,则应将其转换为标准默认日期“1900年1月1日”,并在可能的情况下,给出messgaebox“无效日期”。 我的XML代码是: <DatePicker x:Name="DatePicker1" SelectedDateFormat="Short" Margin="10,10,10,0" Grid.ColumnSpan="5" IsTodayHighli

如果我在WPF日期选择器中写入“2018年2月30日”或“2018年9月14日”或任何无效日期,则应将其转换为标准默认日期“1900年1月1日”,并在可能的情况下,给出messgaebox“无效日期”。 我的XML代码是:

 <DatePicker x:Name="DatePicker1" SelectedDateFormat="Short" Margin="10,10,10,0" Grid.ColumnSpan="5" 
                    IsTodayHighlighted="True"  RenderTransformOrigin="0.129,-2.84" PreviewTextInput="DatePicker1_PreviewTextInput" 
                    DateValidationError="DatePicker1_DateValidationError" 
                    DisplayDateStart="1/1/1990"  SelectedDate="{x:Static sys:DateTime.Now}"  LostFocus="DatePicker1_LostFocus" Height="28" VerticalAlignment="Top" CalendarOpened="DatePicker1_CalendarOpened" >
                    <DatePicker.Resources>
                        <Style TargetType="{x:Type DatePickerTextBox}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <TextBox x:Name="PART_TextBox"
                                            Text="{Binding SelectedDate, RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}, StringFormat=dd-MMM-yyyy}" />
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </DatePicker.Resources>
                </DatePicker>

我的日期选择器的附加输出


如果我写了无效的日期,那么它应该填充messagebox并设置为默认日期“01/01/1900”。

如果您按照msdn建议使用

SelectedDate="{Binding Day, TargetNullValue={x:Static system:DateTime.Now}}"

如果您想要1990年1月1日,您可以将后者替换为您自己的绑定或DateTime.MinValue,如果您想要显示它不是一个正确的日期

至于给用户的反馈,你也许可以使用类似

SelectedDate="{Binding Day, FallbackValue={x:Static sys:DateTime.Today}}"
^这意味着,如果绑定因任何原因(例如无效日期)失败,它应该返回到您设置绑定的位置。在本例中,DateTime.Today

也许您可以通过在日期时间旁边放置一个标签来解决信息返回给用户的问题,该标签在日期无效时可见?或者使用DateTime组件的HintText


希望这就是您所追求的解决方案类型

您有一个
LostFocus
事件处理程序:
DatePicker1\u LostFocus

您可以在事件处理程序中添加验证逻辑:

private void DatePicker1_LostFocus(object sender, RoutedEventArgs e)
{
    if (e.OriginalSource is TextBox textBox)
    {
        var val = textBox.Text;

        if(!DateTime.TryParse(val, out var dateTimeVal))
        {
            MessageBox.Show($"The entered value ({val}) is not valid.");
            textBox.Text = new DateTime(1900, 1, 1).ToShortDateString();
        }
    }
}
  • 上面的代码获取用户输入的文本值
  • 验证它是否为有效值
  • 如果验证失败,它将显示消息并重置值
对于无效日期:

重置后:


sry,这对我不起作用。如果我在datepicker中写入无效日期,然后按tab键,则绑定日不会发生任何事情。你能帮我解决这个问题吗