我正在使用CalendarDatePicker
<CalendarDatePicker x:Name="DatePick" DisplayMode="Decade" Date="{Binding DisplayValue, Mode=TwoWay}"/>
问题是当我绑定Date属性时,选择器不再显示默认的占位符文本(选择日期),而是如果该属性为null(该属性始终设置为null),则现在显示01.01.1916.
public DateTimeOffset? DisplayValue {get;set;}
如果我手动将null作为Date的值,则现在再次显示PlaceholderText.
DatePick.Date=null;
并且绑定仍然有效/在选择日期时仍可以获取所需的值.
那么有可能在不使用代码隐藏的情况下显示占位符文本吗?
解决方法:
似乎calendardatepicker的“最小值”始终是当前年份减去100,因此,我已将您的代码修改为:
public class CalendarDatePickerEx : CalendarDatePicker
{
public DateTimeOffset? DefaultValue { get; set; }
public static readonly DependencyProperty DefaultValueProperty =
DependencyProperty.Register("DefaultValue", typeof(DateTimeOffset), typeof(CalendarDatePickerEx), new PropertyMetadata(null, (sender, e) =>
{
if ((DateTimeOffset?)e.NewValue != null && ((CalendarDatePickerEx)sender).Date.Value.Date.Year == DateTime.Today.Year - 100)
{
((CalendarDatePickerEx)sender).SetDisplayDate((DateTimeOffset)e.NewValue);
((CalendarDatePickerEx)sender).Date = null;
}
else if ((DateTimeOffset?)e.NewValue == null && ((CalendarDatePickerEx)sender).Date.Value.Date.Year == DateTime.Today.Year - 100)
{
{
((CalendarDatePickerEx)sender).SetDisplayDate(DateTimeOffset.Now);
((CalendarDatePickerEx)sender).Date = null;
}
}
}));
}
首选解决方案
如果您使用x:Bind而不是Binding,则所有功能均按预期工作,并且如果绑定的日期值为null,则可以看到占位符.
直接在XAML页面中:
<CalendarDatePicker Date="{x:Bind DataContext.DisplayValue, Mode=TwoWay}"/>
或在DataTemplate内部:
<DataTemplate x:Key="DateFieldItemTemplate"
x:DataType="DataModel:ObjectTypeWithDate">
<Grid>
<CalendarDatePicker Date="{x:Bind DateField, Mode=TwoWay}"/>
</Grid>
</DataTemplate>