平台|MAUI中构建跨平台原生控件实现

微软中国MSDN 点击上方 蓝字关注我们
大家好 , 我是本期的微软MVP实验室研究员——周豪 。 MAUI中使用Handler体系来处理不同平台的原生控件实现 , 即对应的, 如果我们想要创建控件 , 只需要创建基于不同平台的Handler即可 。 那么下面主要教大家如何通过创建Handler(事件处理程序)来构建自己的控件 。
微软MVP实验室研究员
平台|MAUI中构建跨平台原生控件实现
文章图片

周豪
微软最有价值专家(MVP)
目前活跃在国内的多个长视频/短视频平台 , 分享WPF、Xamarin、ASP.NET Core等免费教程 。
下面 , 将通过创建一个进度条控件案例 , 来演示如何在MAUI项目中创建平台控件并且使用它 。
假设控件包含基础的三项功能 , 进度条颜色(Foreground)、进度条当前值(Value)、进度条模式(Indeterminate) 。
第一步
声明控件类
首先 , 创建MyProgressBar类 , 定义对应的依赖属性 。

internalclassMyProgressBar: View { publicstaticreadonlyBindableProperty ForegroundProperty =BindableProperty.Create( nameof(Foreground),typeof(Color),typeof(MyProgressBar),Colors.Transparent); publicstaticreadonlyBindableProperty ValueProperty = BindableProperty.Create( nameof(Value), typeof( double), typeof(MyProgressBar), 0.0);
publicstaticreadonlyBindableProperty IndeterminateProperty = BindableProperty.Create( nameof(Indeterminate), typeof( bool), typeof(MyProgressBar), false);
publicColor Foreground {get{ return(Color)GetValue(ForegroundProperty); } set{ SetValue(ForegroundProperty, value); } }publicdoubleValue {get{ return( double)GetValue(ValueProperty); } set{ SetValue(ValueProperty, value); } }
publicboolIndeterminate {get{ return( bool)GetValue(IndeterminateProperty); } set{ SetValue(IndeterminateProperty, value); } }}
第二步
创建标准处理程序
有了控件的标准属性定义之后 , 接下来就是定义标准的Handler处理程序 , 其中包含控件属性映射器及构造函数 , 如下所示:
partialclassMyProgressBarHandler{publicstaticPropertyMapper<MyProgressBar, MyProgressBarHandler> HorizontalProgressBarMapper = new(ViewHandler.ViewMapper){[ nameof(MyProgressBar.Value)] = MapValue, [ nameof(MyProgressBar.Foreground)] = MapForeground, [ nameof(MyProgressBar.Indeterminate)]= MapIndeterminate };publicMyProgressBarHandler( PropertyMapper mapper) : base( mapper) {

推荐阅读