属性写法:

复制代码
///
/// 绑定的数据上下文
///
[PropertyMetadata(null)]
public virtual object DataContext
{
get { return GetValue(); }
set { SetValue(value); }
}

    /// <summary>/// 前景色/// </summary>[UIPropertyMetadata(typeof(ViewFill), "Black", UIPropertyOptions.AffectsRender)]public ViewFill Foreground{get { return (ViewFill)GetValue(); }set { SetValue(value); }}

复制代码

属性上的特性可以是 PropertyMetadata或者UIPropertyMetadata 中的一个,默认值建议通过这两个特性来设置。如果不加这两个特性,那默认值就是null或者0,属性不能是private,否则子类无法使用该属性,

子类不能用new的方式来覆盖属性

如果是复杂属性类型默认值,可以通过重写 OnOverrideMetadata 来设置

    protected override void OnOverrideMetadata(OverrideMetadata overridePropertys){base.OnOverrideMetadata(overridePropertys);overridePropertys.Override("StrokeStyle", new UIPropertyMetadataAttribute(new Stroke(1)));}

如果不希望声明为依赖属性,上面加[NotCpfProperty]

复制代码
[NotCpfProperty]
public bool IsMeasureValid
{
get;
private set;
}
复制代码

附加属性:

特殊的依赖属性,用来做特殊功能的标记

复制代码
///
/// 获取或设置元素行索引
///
public static Attached RowIndex
{
get { return CpfObject.RegisterAttached(0); }
}

Grid.RowIndex(control, 1);//使用附加属性方式设置行索引

var index = Grid.RowIndex(control);//获取附加属性值

control.Attacheds.Add(Grid.ColumnIndex, 0);
//附加属性的设置和绑定
new Border
{
Attacheds={ { Grid.ColumnIndex, 0,nameof(TabStripPlacement),this}},
}
复制代码

计算属性

计算属性来自Vue里的computed 可绑定,只读属性

当SelectValue或者TextSize属性值变化之后导致TestComputedProperty属性值变化,有提供属性通知

    [Computed(nameof(SelectValue), nameof(TextSize))]public string TestComputedProperty{get { return SelectValue == null ? "" : SelectValue.ToString() + TextSize; }}

属性通知

如果是对象自己内部绑定,定义个方法,上面加个PropertyChanged(通知的属性名)就行,方法参数必须是

(object newValue, object oldValue, PropertyMetadataAttribute attribute)

PropertyChanged可以加多个,相当于绑定到多个属性通知事件

复制代码
[PropertyChanged(nameof(MarginBottom))]
[PropertyChanged(nameof(MarginLeft))]
[PropertyChanged(nameof(MarginRight))]
[PropertyChanged(nameof(MarginTop))]
void RegisterMargin(object newValue, object oldValue, PropertyMetadataAttribute attribute)
{

}
复制代码

一般不建议用重写 OnPropertyChanged的方式来处理属性变化事件

如果外部的话,绑定PropertyChanged事件,通过事件数据CPFPropertyChangedEventArgs来判断属性和获取属性数据

事件定义

CpfObejct里的事件定义,弱引用事件,并且不会被重复绑定

复制代码
public event EventHandler DoubleClick
{
add { AddHandler(value); }
remove { RemoveHandler(value); }
}

RaiseEvent(e, nameof(DoubleClick));//触发事件
USB Microphone https://www.soft-voice.com/
Wooden Speakers https://www.zeshuiplatform.com/
亚马逊测评 www.yisuping.cn
深圳网站建设www.sz886.com

CPF 入门教程 - 属性和事件(七)相关推荐

  1. Caliburn.Micro 杰的入门教程3,事件和参数

    Caliburn.Micro 杰的入门教程1(翻译) Caliburn.Micro 杰的入门教程2 ,了解Data Binding 和 Events(翻译) Caliburn.Micro 杰的入门教程 ...

  2. Linux Shell脚本入门教程系列之(七)Shell输出

    本文是Linux Shell脚本系列教程的第(七)篇,更多shell教程请看:Linux Shell脚本系列教程 与其他语言一样,Shell中也有输出操作,而且在实际应用中也是非常重要的,继上一篇之后 ...

  3. 剑网三插件入门教程(4):事件

    本篇教程将通过编写一个简单的自动采集插件来介绍剑三的"事件(Event) "这个概念. 自动采集插件的功能就是自动采集身边的矿和草药,当人物停下来的时候,如果身边有可以采集到的矿和 ...

  4. AngularJS中文入门教程

    AngularJS入门教程00:引导程序  4517 angularjs   03-29 14:14   01-07 17:25   15  AngularJS AngularJS 入门教程 Angu ...

  5. WPF入门教程(七)---依赖属性(3)(转)

    WPF入门教程(七)---依赖属性(3) 2018年08月24日 08:33:43 weixin_38029882 阅读数:50 四. 只读依赖属性 在以前在对于非WPF的功能来说,对于类的属性的封装 ...

  6. 七牛服务器入门教程_教程:使用无服务器,StepFunction和StackStorm构建社区的入门应用程序…...

    七牛服务器入门教程 by Dmitri Zimine 由Dmitri Zimine 使用无服务器,StepFunction和StackStorm Exchange构建社区注册应用 (Building ...

  7. 蘑菇云「行空板Python入门教程」第七课:舒尔特方格小游戏

    注意力是一切学习的根本,是大脑进行感知.学习.思维等认知活动的基本条件.然而,无论是孩子还是成年人,我们常常会因开小差.注意力无法集中而困扰.此时,找到一个合适的方法来训练我们的注意力势在必行. 舒尔 ...

  8. ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区...

    原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 G ...

  9. R语言七天入门教程二:认识变量与运算符

    R语言七天入门教程二:认识变量与运算符 一.什么是变量 1.变量 顾名思义,我们可以将变量理解为"可以改变的量",是计算机语言中能储存计算结果或能表示值的抽象概念.这里的值可以是数 ...

最新文章

  1. 利用keepalived和haproxy配置mysql的高可用负载均衡
  2. boost::geometry::detail::overlay::traverse用法的测试程序
  3. SAP 电商云 Spartacus UI 的自定义 hamburger 菜单
  4. 【编撰】Directfb 深入 001 初始化简介 01
  5. 【开发者portal在线开发插件系列三】字符串 及 可变长度字符串
  6. sshd iptable 傻瓜配置
  7. 音视频编解码:NVIDIA Jetson Linux Multimedia API(总结)
  8. poj - 1509 Glass Beads
  9. 自动化测试-selenium初始化Driver参考
  10. IntelliJ IDEA破解
  11. Ubuntu安装python步骤
  12. html渐变做一个彩虹,ps渐变工具:制作七色彩虹特效
  13. QQ桌球瞄准器开发(4)透明度、颜色、线宽与母球大小
  14. word排版案例报告_Word操作技巧:图文混排,就是这么简单
  15. matlab hist 横坐标,matlab中hist函数的用法_matlab中hist函数 将EXCEL 中的日期 时间 导入到MATLAB坐标轴中...
  16. 美国计算机专业硕士好申请学校,美国计算机硕士申请难度大PK
  17. TcaplusDB君 · 行业新闻汇编(一)
  18. Ubuntu11.04中文输入法的安装(IBus-pinyin
  19. linux重启 envi服务,envi 4.3在ubuntu edgy下启动错误的解决
  20. 【设计模式】-创造篇-单例

热门文章

  1. yolov5 超大图片检测套路(附代码)
  2. 基于VC++的心脏传导系统模拟器设计(2D虚拟心脏)
  3. 详解服务器端渲染 页面(SSR)
  4. Foosball桌上足球
  5. 基于华三HCL模拟器IPSec VPN组网与配置
  6. 一句话脚本系列之获取eth0网卡的IP地址(或MAC地址)
  7. 智慧矿山解决方案-最新全套文件
  8. vue+element ui 小问号提示
  9. php图片写入带问号,PHP方法参数类型提示带问号(?type)
  10. 【HNOI 2015 开店】【动态点分治 + 前缀和】