是否可以在日期选择器的文本框中自动设置用户输入日期?
我有以下代码
<Style TargetType="{x:Type DatePicker}">
<Setter Property="Foreground" Value="{DynamicResource TextBrush}"/>
<Setter Property="IsTodayHighlighted" Value="True"/>
<Setter Property="SelectedDateFormat" Value="Short"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="CalendarStyle" Value="{DynamicResource DatePickerCalendarStyle}" />
</Style>
<Style TargetType="{x:Type DatePickerTextBox}">
<Setter Property="Foreground" Value="{DynamicResource TextBrush}"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<TextBox x:Name="PART_TextBox"
Text="{Binding Path=SelectedDate, StringFormat='dd/MM/yyyy',
RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
在我看来,我有
<DatePicker Height="25" HorizontalAlignment="Left" Margin="518,34,0,0" Name="DateThru" VerticalAlignment="Top" Width="115" SelectedDate="{Binding DateThruSelected, Mode=TwoWay}" IsEnabled="{Binding DateThruIsEnabled}" >
</DatePicker>
所以有两个问题。 第一 当我进入文本框“030613”或“03062013”并点击时我希望它自动格式化为“03/06/2013”在datpicker的文本框中。
第二,我期待SelectedDate属性设置为“03/06/2013”。 (如果我从嵌入式日历中选择日期,则SelectedDate绑定可以正常工作。)
我目前发布的代码中没有两个都没有。 知道如何实现这两个目标吗?
提前致谢!
答案 0 :(得分:0)
关于第一期:
正念我想到了。为了便于使用,请尝试使用一些抽象类,并派生它,如:
public abstract class DateTimeRegexPattern
{
public abstract DateTime DateTime { get; }
public abstract bool IsMatch(string input);
}
对于您希望识别的每个模式,您派生该抽象类(可以增强),并将它们放在列表中。每当文本框的内容发生变化时,为了检测可以应用哪种模式,请使用LINQ。
List<DateTimeRegexPattern> patterns = new List<DateTimeRegexPattern>();
// Fill the list with one instance of each of derived classes of DateTimeRegexPattern
DateTimeRegexPattern matching = patterns.FirstOrDefault(x => x.IsMatch("030613"));
然后,检索DateTime,如果有任何模式匹配,并将其应用于DatePicker,如果当前日期不同。
关于第二个问题: http://msdn.microsoft.com/fr-fr/library/system.windows.controls.datepicker.selecteddatechanged.aspx此事件可以解决问题。当日期更改时,如果日期不同,请更改文本框的内容。