如何使用自定义控件和平台指定的代码创建基于Xamrin.Forms的自定义控件库? 我需要创建具有可靠性的模块体系结构,以添加一些具有平台指定代码的模块。
答案 0 :(得分:1)
您在描述的所有内容都已在Xamarin.Forms框架中进行了说明。具体来说,支持使用特定于平台的渲染器的UI控件和使用DependencyService的非ui代码。在这两种情况下,您都可以在公共库中定义公共数据结构,接口和View子类,这些库引用Xamarin.Forms并以Android / iOS / Windows Phone平台为目标,并在专门针对各种平台的程序集中提供特定于平台的代码。 / p>
对于UI控件,您可以创建特定于平台的渲染器(又名"自定义渲染器"),并使用ExportRenderer属性将其注册到Xamarin Forms运行时。在实践中,这应该起作用的方式是来自" API组件的控制" (从这里开始,我将使用Jason Smith用于它的术语:" model")用于捕获任何配置或数据绑定,然后自定义渲染器使用包含在其中的数据用于确定本机控件的外观/行为方式的模型。重要的是要注意,这里实际上有两个实例:模型实例,它是Xamarin Forms视图用作控制实际控件行为的API表面,以及渲染器实例,是什么实际上绘制UI。如果存在任何数据绑定,您将希望渲染器观察模型的可绑定属性以进行更改,以便UI可以反映模型的状态。在Xamarin's docs for Custom Renderers。
中更详细地描述了该主题对于非UI代码("无头"地理定位,传感器等功能),您可以使用DependencyService。与UI控件类似,您可以定义一个抽象API(表示为接口),它存在于" API程序集中。提供与平台无关的方式来访问功能,并为使用DependencyService属性注册的每个受支持平台提供实现。实际上,您可以将DependencyService视为使用该属性自动填充的依赖注入容器。同样,Xamarin docs for the DependencyService。
完全涵盖了这个主题