首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DependencyObject DateTime格式更改

DependencyObject DateTime格式更改
EN

Stack Overflow用户
提问于 2015-04-21 08:55:00
回答 1查看 131关注 0票数 0

我正在使用自定义的数据报警器,并且我试图通过依赖项属性将日期格式更改为仅显示年份。经过一些实验,我得到了一个Nullable object must have a value异常。我使用的代码如下:

代码语言:javascript
复制
 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"

另一方面,使用下面的StyleDatePicker进行格式化:

代码语言:javascript
复制
    <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>

有办法让这件事成功吗?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-23 08:30:26

在对可能的解决方案进行了数小时的测试之后,我得出的结论是,DatePicker永远不会接受只有YearDateTime。我(除了)实现了@克莱门斯建议的解决方案,希望在某个时候为一个接受DatePicker YearOnly DateTime的人找到一个解决方案。无论如何,我使用的代码对于任何感兴趣的人来说都是低端的。如果有人对我的问题有其他的解决办法,请给这个问题加上一个答案。

代码语言:javascript
复制
   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);
    }

.

代码语言:javascript
复制
 #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));

    #endregion
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29767395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档