博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二十三章:触发器和行为(七)
阅读量:6327 次
发布时间:2019-06-22

本文共 2532 字,大约阅读时间需要 8 分钟。

行为

触发器和行为通常是串联讨论的,因为它们具有一些应用重叠。 有时候你会感到困惑是否使用触发器或行为,因为似乎要么这样做

工作。
你可以用触发器做任何事情,你也可以做一个行为。 但是,行为总是涉及一些代码,这是一个派生自Behavior 的类。 如果您正在为EventTrigger编写Action 派生词,或者为其他触发器的EnterActions或ExitActions集合编写,则触发器仅涉及代码。
显然,如果您可以使用其中一个触发器执行所需操作而无需编写任何代码,则不要使用行为。 但有时它并不那么清楚。
让我们比较执行相同工作的触发器和行为。
本章前面显示的TriggerEntryValidation程序使用一个名为NumericEntryAction的类,它检查输入到Entry视图中的数字是否有资格作为有效的double值,如果不是,则将文本设置为红色:

namespace Xamarin.FormsBook.Toolkit{     public class NumericValidationAction : TriggerAction
{ protected override void Invoke(Entry entry) { double result; bool isValid = Double.TryParse(entry.Text, out result); entry.TextColor = isValid ? Color.Default : Color.Red; } }}

这是在附加到条目的EventTrigger中引用的:

您可以对同一作业使用行为。 第一步是从Behavior 派生一个类。 泛型参数是行为可以处理的最通用的基类。 在这个例子中,这是一个Entry视图。 然后,重写两个名为OnAttachedTo和OnDetachingFrom的虚拟方法。 当行为附加到特定可视对象时,将调用OnAttachedTo方法,并为您的行为提供初始化自身的机会。 通常这涉及将一些事件处理程序附加到对象。 从可视对象中删除行为时,将调用OnDetachingFrom方法。 即使仅在程序终止时发生这种情况,您也应该撤消OnAttachedTo方法所做的任何事情。

这是NumericValidationBehavior类:

namespace Xamarin.FormsBook.Toolkit{    public class NumericValidationBehavior : Behavior
{ protected override void OnAttachedTo(Entry entry) { base.OnAttachedTo(entry); entry.TextChanged += OnEntryTextChanged; } protected override void OnDetachingFrom(Entry entry) { base.OnDetachingFrom(entry); entry.TextChanged -= OnEntryTextChanged; } void OnEntryTextChanged(object sender, TextChangedEventArgs args) { double result; bool isValid = Double.TryParse(args.NewTextValue, out result); ((Entry)sender).TextColor = isValid ? Color.Default : Color.Red; } }}

OnAttachedTo方法为Entry的TextChanged事件附加处理程序,OnDetachingFrom方法分离该处理程序。 处理程序本身与NumericValidationAction中的Invoke方法执行相同的工作。

因为NumericValidationBehavior类安装TextChanged事件的处理程序,所以可以使用该行为而不指定类名以外的任何内容。 这是BehaviorEntryValidation程序的XAML文件,它与使用EventTrigger的早期程序不同,它通过指定应用于四个Entry视图的隐式样式的行为:

此Style对象在四个Entry视图中共享,因此只实例化一个NumericValidationBehavior对象。 由于此单个对象附加到四个Entry视图中的每一个,因此它会在每个视图上附加一个TextChanged处理程序,以便单个NumericValidationBehavior对象在四个视图上独立运行:

2019_04_05_200913
在这个特定的例子中,TriggerAction比行为更受欢迎,因为它代码较少而代码不引用特定事件,因此它更加通用。
但是行为可以像您想要的那样一般化或特定,行为也可以通过数据绑定更全面地参与XAML文件。

转载地址:http://xkjaa.baihongyu.com/

你可能感兴趣的文章
Effective Object C 2.0 『熟悉Object C』
查看>>
python可迭代对象
查看>>
React项目中使用dagre-d3
查看>>
凌晨3点不回家:成年人的世界不是他们说的那样
查看>>
NOW直播——Flutter组件化开发方案
查看>>
如何用node.js创建一个应用
查看>>
GMQ致力于加速区块链应用实现快速落地
查看>>
朱晔的互联网架构实践心得S2E7:漫谈平台架构的工作(基础架构、基础服务、基础平台、基础中间件等等)...
查看>>
最终还是决定用SCSS,记录下SCSS的语法
查看>>
华为4.0系统怎么没ROOT激活xposed框架的经验
查看>>
微信小程序用户昵称emoji乱码问题
查看>>
前端知识梳理
查看>>
JavaScript-实例属性与原型属性区别
查看>>
使用代理ip防止爬虫被封ip(附亿牛云代理开发过程)
查看>>
【译】Java8官方教程:数值类
查看>>
NODE基础概念
查看>>
不得不懂系列(2)-玩转Go中的RPC
查看>>
ES5-Array-reduce/reduceRight
查看>>
Html5 Canvas动画基础碰撞检测的实现
查看>>
如何改善国内前端开发行业的尴尬地位?
查看>>