当前位置: 首页 > wzjs >正文

网站建设设计师我的网站突然打不开了

网站建设设计师,我的网站突然打不开了,建设捐款网站,北京软件开发公司排名前十强今天来谈一谈MAUI跨平台技术的核心概念——跨平台控件。 无论是MAUI,Xamarin.Forms还是其它的跨平台技术,他们是多个不同平台功能的抽象层,利用通用的方法实现所谓“一次开发,处处运行”。 跨平台框架需要考虑通用方法在各平台的兼容,但由于各原生平台(官方将原生称为本…

今天来谈一谈MAUI跨平台技术的核心概念——跨平台控件。

无论是MAUI,Xamarin.Forms还是其它的跨平台技术,他们是多个不同平台功能的抽象层,利用通用的方法实现所谓“一次开发,处处运行”。

跨平台框架需要考虑通用方法在各平台的兼容,但由于各原生平台(官方将原生称为本机)功能的差异,可能不能满足特定平台的所有功能。

比如,众所周知,MAUI的手势识别器没有提供长按(LongPress)手势的识别, TapGestureRecognizer也仅仅是按下和抬起的识别,没有提供长按的识别。

这时候就需要开发者自己实现特定平台的功能,这就是自定义控件。

要想重写控件,或增强默认控件的功能或视觉效果,最基础的功能就是要拿到跨平台控件,和本机控件。

通过跨平台控件定义的属性传递到本机控件,在本机控件中响应和处理自定义属性的变化。达到自定义控件的目的。

接下来介绍在MAUI新增的特性:控制器(Handler),好用但知道的人不多 。

Handler

因为跨平台控件的实现由本机视图在每个平台上提供的,MAUI为每个控件创建了接口用于抽象控件。 实现这些接口的跨平台控件称为 虚拟视图。 处理程序 将这些虚拟视图映射到每个平台上的控件,这些控件称为 本机视图

在VisualElement中的Handler对象是一个实现了IElementHandler接口的类,通过它可以访问 虚拟视图和 本机视图

public interface IViewHandler : IElementHandler
{bool HasContainer { get; set; }object? ContainerView { get; }IView? VirtualView { get; }Size GetDesiredSize(double widthConstraint, double heightConstraint);void PlatformArrange(Rect frame);
}

每个控件有各自的Handler以及接口,请查看官方文档。

它可以通过注册全局的映射器,作为特定本机平台上实现自定义控件的功能的入口。
然后结合.NET 6 条件编译的语言特性,可以更加方便在但文件上,为每个平台编写自定义处理程序。

Entry是实现IEntry接口的单行文本输入控件,它对应的Handler是EntryHandler。

在这里插入图片描述

如果我们想要在Entry控件获取焦点时,自动全选文本。

  Microsoft.Maui.Handlers.EntryHandler.Mapper.AppendToMapping("MyCustomization", (handler, view) =>{
#if ANDROIDhandler.PlatformView.SetSelectAllOnFocus(true);
#elif IOS || MACCATALYSThandler.PlatformView.EditingDidBegin += (s, e) =>{handler.PlatformView.PerformSelector(new ObjCRuntime.Selector("selectAll"), null, 0.0f);};
#elif WINDOWShandler.PlatformView.GotFocus += (s, e) =>{handler.PlatformView.SelectAll();};
#endif});

或者,可以使用分部类将代码组织到特定于平台的文件夹和文件中。 有关条件编译的详细信息,请参考官方文档。

与Xamarin.Forms实现的区别

在Xamarin.Forms时代,已经提供了一套自定义控件的机制,呈现器(Renderer)。

Xamarin.Forms的控件,比如Entry是通过在封装于特定平台下的EntryRenderer的类中渲染的。

在这里插入图片描述

通过重写控件默认Renderer,可以完全改变控件的外观和行为方式。

  • Element,Xamarin.Forms 元素
  • Control,本机视图、小组件或控件对象

为什么要用Handler代替Renderer

虽然Renderer功能非常强大,但是绝大部分场景来说,不是每次都需要重写控件,而仅仅是给控件添加一些特定平台的增强功能,如果还需要重写OnElementPropertyChanged 将跨平台控件的属性值传输到本机控件,这种方式太过于复杂。

以我的理解,Handler是对Renderer的一种优化,它解决了Renderer的这些问题:Renderer和跨平台控件的耦合,对自定义控件的生命周期管理,和对自定义控件的更细粒度控制。

解耦

在Xamarin.Froms的Render中,要想拿到跨平台控件的属性,需要通过直接引用跨平台类型,这样就导致了Renderer和跨平台控件的耦合。

在MAUI中,处理程序会将平台控件与框架分离。平台控件只需处理框架的需求。这样的好处是处理程序也适用于其他框架(如 Comet 和 Fabulous)重复使用。

生命周期管理

可以通过处理程序的映射器(Mapper)在应用中的任意位置进行处理程序自定义。 自定义处理程序后,它将影响在应用中任意位置的该类型所有控件。

可以通过控件HandlerChanged 和HandlerChanging,管理Handler的生命周期,通过其参数可以获取控件挂载、移除Handler的时机,可以在这里做一些初始化和清理工作。

更细粒度的控制

因为实现了全局映射器注册,这样的好处还有不用重写子类控件,我们可以通过获取跨平台控件的某属性,或注解属性,拿到需要进行处理的控件。实现自由的面向切面的过滤。

用Effect来实现呢?

或者我们仅仅想更改控件外观,可以通过Effect来实现。但无论是Effect还是Renderer,他们只能是全局的,在需要状态维护的业务逻辑中,比如长按,实际上是按下,抬起的过程,没有按下的控件不要响应抬起,正因为这样要记录哪些控件已经按下,可能需要用一个字典维护所有的自定义控件。

而MAUI的自定义映射器实际上就是一个字典,减少了代码的复杂度。

在MAUI中,官方建议迁移到Handler。Renderer虽仍然可以在MAUI中使用


文章转载自:

http://dxn3kzk7.ndzhL.cn
http://5Tr1ofnf.ndzhL.cn
http://ZFA8JWUP.ndzhL.cn
http://PuQWce17.ndzhL.cn
http://dV1qDFli.ndzhL.cn
http://MRARr1x5.ndzhL.cn
http://eU5gDqDJ.ndzhL.cn
http://eryKTmqm.ndzhL.cn
http://oyudUHkf.ndzhL.cn
http://14hTemh2.ndzhL.cn
http://JtWA1rkW.ndzhL.cn
http://zyJWCOJB.ndzhL.cn
http://8i1taGvJ.ndzhL.cn
http://JORa2gh5.ndzhL.cn
http://Cue6yZUs.ndzhL.cn
http://f114M0Tb.ndzhL.cn
http://5jI4kaJt.ndzhL.cn
http://9jdBrUbM.ndzhL.cn
http://rS6czakE.ndzhL.cn
http://BhGxUQCl.ndzhL.cn
http://OHLKtbwi.ndzhL.cn
http://Ek1tIh5b.ndzhL.cn
http://pWYVOxmj.ndzhL.cn
http://Nbc4Ztgq.ndzhL.cn
http://z247aXwQ.ndzhL.cn
http://D9ofloB5.ndzhL.cn
http://75GDhU30.ndzhL.cn
http://OEVIQFSK.ndzhL.cn
http://0Jmw2bRs.ndzhL.cn
http://t6Qz1Sj2.ndzhL.cn
http://www.dtcms.com/wzjs/700165.html

相关文章:

  • 青岛商媒做网站怎么样网站做反向代理对百度收录有影响吗
  • 网站服务器无法访问电子商务网站开发教程课后习题
  • 建设网站网页打不开WordPress抓取豆瓣
  • 广州网站的建设软件开发入门
  • 无忧网站建设报价什么是黄页
  • 网站建设维护合同合肥网站代运营公司有哪些
  • 用seo对网站做分析山东网站制作
  • 郑州网站开发yipinpai山东网站建设SEO优化制作设计公司
  • 有什么网站可以做设计兼职在线制作图片加闪光字
  • dedecms网站管理系统国外vps私人
  • 一个做特卖的网站做婚礼策划的网站
  • 广州天河建站公司广西建设执业资格注册中心官网
  • 备案域名购买完过户简单吗郑州网站seo公司
  • 手机建立网站多少钱北京网站优化排名
  • 网站建设的书 豆瓣中国能建电子商务平台
  • 自助建站网站建设设计公司中英文网站制作
  • 食品网站建设案例可以直接玩游戏的网址
  • wordpress畅言搜索引擎优化指的是
  • 使用h5做的学习网站源码做网站的专业公司
  • 免费代理服务器网站台州市住房和城乡建设厅网站
  • 怎么创建网站域名北京app开发多少钱
  • 建设外贸网站费用宁波led网站建设
  • 江油建设局网站南通建设工程造价信息网站
  • 做饰品网站网站建设 客户
  • php网站后台忘记密码推广方案范例
  • 网站建设标语文案海誉网站定制
  • 做网站和app需要多久为什么很少人敢娶外贸女
  • 上海做网站企业wordpress支付宝付费
  • 苏州高端网站建设如何更改WordPress登录密码
  • 企业网站可以免费做吗网站渗透案例