DependencyObject DateTime格式更改

时间:2015-04-21 08:55:00

标签: wpf datepicker dependency-properties datetime-format

我正在使用自定义日期选择器,我正在尝试将dateformat更改为仅通过依赖项属性显示Year。经过一些实验后,我得到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中使用它: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>

有没有办法让这项工作?感谢。

1 个答案:

答案 0 :(得分:0)

经过数小时测试可能的解决方案后,我得出结论:DatePicker永远不会接受只有DateTime的{​​{1}}。我(简称)实现了@Clemens建议希望在某个时刻为接受YearOnly Year的{​​{1}}找到解决方案的解决方案。无论如何,我使用的代码对任何感兴趣的人都是如此。如果有人对我的问题有其他解决方案,请添加对此问题的答案。

DatePicker

.................

DateTime