【发布时间】:2013-05-20 09:05:08
【问题描述】:
我有一个日期选择器,但它允许我输入任何文本。我想禁止用户输入文本。应该允许用户从日历中选择日期。
<Window x:Class="MyTestForDatePicker.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<!--<Grid>-->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<DatePicker Grid.Column="0" Grid.Row="0" Margin="2" Name="MySelectedDate" VerticalContentAlignment="Center" ></DatePicker>
<DatePickerTextBox Grid.Column="1" Grid.Row="3" Margin="2" Name="SelectedDate" IsReadOnly="True"></DatePickerTextBox>
<Button Grid.Column="1" Grid.Row="1" Margin="100,102,203,154" VerticalContentAlignment="Center" Name="Ok" Click="Ok_Click_1"/>
</Grid>
【问题讨论】:
-
为什么不直接用一个只读的文本框打印选中日期的值呢?为什么你需要一个
<DatePickerTextBox>,如果它是只读的? -
为什么“输入任何文本”有问题?
24 May 2013是一个完全有效的日期。为什么要惩罚喜欢使用键盘的用户?输入24/5/13比使用鼠标和选择器控件要快得多。 -
@CraigYoung:因此您不必费心验证垃圾输入以及可能导致的绑定错误。
-
@BCA 我不确定您是否正确理解我的评论。问题想要“禁止用户输入文本(句号)”。大多数语言中的大多数现代控件都提供了一种相当简单的方法来验证键盘输入。您是否认为与默认控制行为作斗争而不是询问如何在现有框架内为各种用户提供更好的体验更好?
-
@CraigYoung:我明白你在说什么。但是,在进行 MVVM 数据绑定时,存在由于输入错误(例如“2016-05-a3”)而导致绑定失败的情况,并且视图模型没有意识到此错误,因此无法正确验证。有解决方法,但很复杂。在一些简单的用例中,将用户的选择限制为有效的
DateTime值更有意义。
标签: wpf datepicker