FrameworkPropertyMetadataOptions.Inherits 属性沿袭
来源:互联网 发布:matlab筛选excel数据 编辑:程序博客网 时间:2024/06/08 03:02
今天研究了下属性的沿袭(DependencyProperty Inherit),研究之后和原来想象的有些出入:
假如我有一个自定义的Button, ClickedButton继承自Button控件,又增加了一个DependencyProperty(设计成可继承的), IsClicked。在XAML里面,假如我把Button的Content设置成TextBlock的话,按照以前的想法,TextBlock会有ClickedButton.IsClicked的属性,而实际情况是没有!
所以总结下来,假如你增加了一个新的DP,这个DP就算设置成可沿袭的,默认的控件依然不会自动沿袭这个属性。只有一种情况,可以让你的DP被沿袭,那就是在其他DependencyObject里面也实现这个DP,而且用AddOwner进行注册!(代码在文章最后会有)。同时需要注意的是,假如你的DP的MetaData没有“可沿袭”的属性,那么不管你是其他控件的儿子或者是父亲,你DP的属性也不会得到或者被沿袭。
4/17日更新:假如父类对某一个DP进行了AddOwner的操作,那么子类也会继承这个DP。
public class ClickButton : Button { public static readonly DependencyProperty IsClickedProperty = DependencyProperty.Register("IsClicked", typeof(bool), typeof(ClickButton), new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.AffectsRender, null, null, false, UpdateSourceTrigger.PropertyChanged)); public bool IsClicked { set { SetValue(IsClickedProperty, value); } get { return (bool)GetValue(IsClickedProperty); } } protected override void OnClick() { IsClicked = !IsClicked; base.OnClick(); } } public class ClickButton2 : Button { public static readonly DependencyProperty IsClickedProperty; static ClickButton2() { IsClickedProperty = ClickButton.IsClickedProperty.AddOwner(typeof(ClickButton2)); FrameworkPropertyMetadata meta = new FrameworkPropertyMetadata(); meta.Inherits = true; IsClickedProperty.OverrideMetadata(typeof(ClickButton2), meta); } protected override void OnClick() { IsClicked = !IsClicked; base.OnClick(); } public bool IsClicked { set { SetValue(IsClickedProperty, value); } get { return (bool)GetValue(IsClickedProperty); } } }
- FrameworkPropertyMetadataOptions.Inherits 属性沿袭
- asp.net的Inherits属性
- Inherits
- Inherits Codebehind Src 在<%@Page的属性
- Inherits语句
- ASPNET: 请确保此代码文件中定义的类与“inherits”属性匹配!!
- ASPNET: 请确保此代码文件中定义的类与“inherits”属性匹配
- asp.net中@page指令的属性Inherits、Src、CodeBehind区别
- Inherits、Src、CodeBehind
- MFC,ATL,WTL的历史沿袭
- MFC,ATL,WTL的历史沿袭
- MFC,ATL,WTL的历史沿袭
- MFC,ATL,WTL的历史沿袭--
- 请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的。
- Asp.net Futures 工程新建页解决“请确保此代码文件中定义的类与“inherits”属性匹配”的错误
- 请确保此代码文件中定义的类与“inherits”属性匹配,并且该类扩展的基类(例如Page 或UserControl)是正确的
- 02.Javascript中的继承----Inherits
- Inherits、CodeFile、CodeBehind的区别
- struts2教程- Interceptor(默认拦截器)介绍
- 和差值最小子数组划分
- 修改apache设置,支持UTF8和GBK
- 再论检测usb口的设备插拔
- 资料分享
- FrameworkPropertyMetadataOptions.Inherits 属性沿袭
- Fedora优化系统服务让系统跑得更快
- tlb文件为何而生?
- Android dumpsys
- 内存碎片详解
- linux下python、django框架的配置
- 关于 在线窗口翻译 在浏览器中使用的问题
- Unity界面插件NGUI核心组件说明
- linux基础之uboot load address、entry point、 bootm address以及kernel运行地址的意义及联系