Xamarin.Forms 自定义控件库
本文关键字:自定义控件 Forms Xamarin | 更新日期: 2023-09-27 18:37:25
如何使用我的自定义控件和平台指定的代码创建基于 Xamrin.Forms 的自定义控件库?我需要使模块架构能够使用平台指定的代码添加一些模块。
你所描述的所有内容都已在 Xamarin.Forms 框架中得到说明。具体而言,支持具有特定于平台的呈现器的 UI 控件以及使用 DependencyService 的非 UI 代码。在这两种情况下,您都可以在引用 Xamarin.Forms 并面向 Android/iOS/Windows Phone 平台的公共库中定义通用数据结构、接口和 View 子类,并在专门针对各种平台的程序集中提供特定于平台的代码。
对于 UI 控件,创建特定于平台的呈现器(也称为"自定义呈现器"),并使用 ExportRenderer 属性将它们注册到 Xamarin 窗体运行时。在实践中,这应该的工作方式是,来自"API 程序集"的控件(从这里开始,我将使用 Jason Smith 用于它的术语:"模型")用于捕获任何配置或数据绑定,然后自定义呈现器使用模型中包含的数据来确定本机控件的外观/行为。请务必注意,此处实际上有两个实例:模型实例(Xamarin 窗体视图用作 API 图面来控制实际控件的行为)和呈现器实例(实际绘制 UI)。如果存在任何数据绑定,你将希望呈现器监视模型的可绑定属性的更改,以便 UI 可以反映模型的状态。Xamarin 的自定义呈现器文档中更详细地介绍了本主题。
对于非 UI 代码("无头"功能,如地理位置、传感器等),您可以使用依赖服务。与 UI 控件类似,您可以定义存在于"API 程序集"中的抽象 API(表示为接口),以提供独立于平台的方式来访问该功能,并为使用 DependencyService 属性注册的每个受支持平台提供实现。实际上,您可以将依赖关系服务视为使用该属性自动填充的依赖关系注入容器。同样,依赖项服务的 Xamarin 文档中完全介绍了本主题。