我正在使用自定义的数据报警器,并且我试图通过依赖项属性将日期格式更改为仅显示年份。经过一些实验,我得到了一个Nullable object must have a value异常。我使用的代码如下:
public bool YearOnly
{
get { return (bool)this.GetValue(YearOnlyProperty); }
set { this.SetValue(YearOnlyProperty, value); }
}
public static readonly DependencyProperty YearOnlyProperty =
DependencyProperty.Register("YearOnly",
typeof(bool),
typeof(CustomizableDatePicker),
new FrameworkPropertyMetadata(false, new PropertyChangedCallback(OnYearOnlyChanged)));
private static void OnYearOnlyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
CustomizableDatePicker control = (CustomizableDatePicker)d;
control.SelectedDate = Convert.ToDateTime(control.SelectedDate.Value.ToString("yyyy"));
}更改日期格式,显然它不起作用。
我正在使用来自DatePicker的as:YearOnly="True"。
另一方面,使用下面的Style对DatePicker进行格式化:
<Style TargetType="{x:Type DatePickerTextBox}">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<TextBox x:Name="PART_TextBox"
Text="{Binding Path=SelectedDate, StringFormat='yyyy',
RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>有办法让这件事成功吗?谢谢。
发布于 2015-04-23 08:30:26
在对可能的解决方案进行了数小时的测试之后,我得出的结论是,DatePicker永远不会接受只有Year的DateTime。我(除了)实现了@克莱门斯建议的解决方案,希望在某个时候为一个接受DatePicker YearOnly DateTime的人找到一个解决方案。无论如何,我使用的代码对于任何感兴趣的人来说都是低端的。如果有人对我的问题有其他的解决办法,请给这个问题加上一个答案。
private void CustomizableDatePicker_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
if (!this.YearOnly)
return;
this.SetValue(SelectedYearProperty, SelectedDate.Value.Year);
Binding bnd = new Binding
{
Path = new PropertyPath("SelectedDate"),
StringFormat = ("yyyy"),
RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor, typeof(CustomizableDatePicker), 1)
};
this.innerTextBox.SetBinding(TextBox.CustomizableTextBox.TextProperty, bnd);
}.
#region YearOnly DependencyProperty
public bool YearOnly
{
get { return (bool)this.GetValue(YearOnlyProperty); }
set { this.SetValue(YearOnlyProperty, value); }
}
public static readonly DependencyProperty YearOnlyProperty =
DependencyProperty.Register("YearOnly",
typeof(bool),
typeof(CustomizableDatePicker),
new FrameworkPropertyMetadata(false));
#endregion
#region SelectedYear DependencyProperty
public int SelectedYear
{
get { return (int)this.GetValue(SelectedYearProperty); }
set { this.SetValue(SelectedYearProperty, value); }
}
public static readonly DependencyProperty SelectedYearProperty =
DependencyProperty.Register("SelectedYear",
typeof(int),
typeof(CustomizableDatePicker));
#endregionhttps://stackoverflow.com/questions/29767395
复制相似问题