加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何覆盖泛型类中的依赖项属性?

发布时间:2020-12-15 17:23:24 所属栏目:百科 来源:网络整理
导读:所以我上了课;我们以ScrollViewer类为例.它有一个名为Content的依赖属性,它接受System.Object类型的任何东西,太棒了! 假设我从ScrollViewer派生一个类,让我们称之为ZoomScrollViewer,它使用键盘按下鼠标添加一些基本的缩放和平移.它还添加了自己的依赖属性A
所以我上了课;我们以ScrollViewer类为例.它有一个名为Content的依赖属性,它接受System.Object类型的任何东西,太棒了!

假设我从ScrollViewer派生一个类,让我们称之为ZoomScrollViewer,它使用键盘按下鼠标添加一些基本的缩放和平移.它还添加了自己的依赖属性AutoscaleContent.

现在,我希望能够将ZoomScrollViewer放入UI窗口,但我只希望它接受Canvas作为内容.当然,我要创建一个ZoomScrollViewer< T>类.

但是,如何更改Content属性以便只接受< T>类型的元素?我可以覆盖依赖属性吗?我有点困惑并尝试过:

public new T Content
    {
        get { return (T)base.Content; }
        set { base.Content = value; }
    }

但是当然这使它不再是依赖属性,所以当我设置绑定时,所有的XAML代码都会失败.

编辑:还应该注意我已经看过使用:

ZoomScrollViewer.ContentProperty.OverrideMetadata(typeof(ZoomScrollControl2<T>),new PropertyMetadata(...?));

要看看我是否可以使用它做任何事情,但似乎你只能覆盖默认值,除非我遗漏了什么?

更新:我现在尝试使用以下内容:

public class ZoomScrollControl2<T> : ZoomScrollViewer where T : FrameworkElement
{
    static ZoomScrollControl2()
    {
        ContentProperty.OverrideMetadata(typeof(ZoomScrollControl2<T>),new FrameworkPropertyMetadata(typeof(ZoomScrollControl2<T>)));
    }
}

public class CanvasZoomControl : ZoomScrollControl2<Canvas>
{
}

我认为它会起作用,但它似乎仍然接受任何类型的内容.

更新:简而言之,我不确定我想做的事情是否可行,所以我将讨论标记为答案,即使这不是答案本身.

解决方法

我建议按照 this MSDN文章的建议尝试这种方法.

它应该覆盖referal类型,因此您可以使用派生类型引用它.

在.NET Framework中,派生类型不会明确依赖属性可见性,因为在类型树中搜索权限属性在性能方面具有成本,并且考虑到我们在UI绑定上使用DP,它可能导致不期望的性能问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读