
假设我从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,它可能导致不期望的性能问题.
总结以上是内存溢出为你收集整理的c# – 如何覆盖泛型类中的依赖项属性?全部内容,希望文章能够帮你解决c# – 如何覆盖泛型类中的依赖项属性?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)