【问题标题】:C# override DependencyProperty mark as obsoleteC# 覆盖 DependencyProperty 标记为过时
【发布时间】:2018-07-17 15:56:51
【问题描述】:

我有一个具有 DependencyProperty 的自定义 WPF 控件:

    public static readonly DependencyProperty DeferedVisibilityProperty;


    private static void OnDeferedVisibilityChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
        var control = (CircularProgressBar)d;
        control.OnDeferedVisibilityChanged();
    }


    public bool DeferedVisibility {
        get => (bool)GetValue(DeferedVisibilityProperty);
        set => SetValue(DeferedVisibilityProperty, value);
    }


    private void OnDeferedVisibilityChanged() {
        if(DeferedVisibility) {
            VisualStateManager.GoToState(this, "Visible", true);
            Visibility = Visibility.Visible;
        } else {
            VisualStateManager.GoToState(this, "Collapsed", true);
            Visibility = Visibility.Collapsed;
        }
    }

现在我们可以在没有 bool-to-visibility 转换器的情况下设置可见性。 使用 Visibility DependencyProperty 时,它不再起作用,所以我想将其标记为已过时。

我知道你可以像这样标记成员[Obsolete("Please use DeferedVisibility")]

那么如何将基类的可见性属性标记为过时呢?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    只需覆盖 Visibility 依赖属性:

    [Obsolete("Use something else")]
    public new Visibility Visibility
    {
        get { return (Visibility)GetValue(VisibilityProperty); }
        set { SetValue(VisibilityProperty, value); }
    }
    
    [Obsolete("Use something else")]
    public new static readonly DependencyProperty VisibilityProperty =
        DependencyProperty.Register(nameof(Visibility), typeof(Visibility), typeof(YourCustomControl), new PropertyMetadata(0));
    

    但我看到的问题是,过时只会在后面的代码中标记,而不是在 XAML 中(至少由我标记)

    【讨论】:

    • 这个解决方案很好,谢谢。我只覆盖 Visibility 属性,因为 DependencyProperty 给了我一个例外。幸运的是,ReSharper resharper 还为我标记了 XAML 代码。
    猜你喜欢
    • 2019-08-29
    • 1970-01-01
    • 2017-07-09
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多