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


}
publicMyProgressBarHandler( ) : base( HorizontalProgressBarMapper) {
}}
第三步
创建平台处理程序
在属性映射器中 , 我们可以很轻松看见对应了三个属性的事件处理程序 , 但是目前并没有定义它 , 这意味着你需要在不同平台下分别实现对应的三个事件处理程序 , 赶紧在Platforms > Android > Controls 下定义了一个MyProgressBarHandler , 如下所示:
平台|MAUI中构建跨平台原生控件实现
文章图片

接着继承于ViewHandler并且与原生安卓ProgressBar关联 。

usingAndroid.Widget; partial classMyProgressBarHandler: ViewHandler<MyProgressBar, ProgressBar>{
}
重写CreateNativeView(这是创建本地控件最开始的地方) 。
protectedoverrideProgressBar CreateNativeView( ) {returnnewProgressBar(Context, null, Android.Resource.Attribute.ProgressBarStyleHorizontal) {Indeterminate = true, Max = 10000, }; }紧接着, 实现三个事件处理程序方法, MapValue、MapForeground、MapIndeterminate 。
staticvoidMapValue( MyProgressBarHandler handler, MyProgressBar view) {varnativeView= handler?.NativeView; nativeView.Progress = ( int)(view.Value * Max); } 【平台|MAUI中构建跨平台原生控件实现】staticvoidMapForeground( MyProgressBarHandler handler, MyProgressBar view) {UpdateForeground(handler?.NativeView, view.Foreground);
staticvoidUpdateForeground( ProgressBar nativeProgressBar, Color color) {if(color == null) {(nativeProgressBar.Indeterminate ? nativeProgressBar.IndeterminateDrawable :nativeProgressBar.ProgressDrawable)?.ClearColorFilter;}else{vartintList = ColorStateList.ValueOf(color.ToNative);
if(nativeProgressBar.Indeterminate) nativeProgressBar.IndeterminateTintList = tintList;elsenativeProgressBar.ProgressTintList = tintList;}}}
staticvoidMapIndeterminate( MyProgressBarHandler handler, MyProgressBar view) {varnativeView= handler?.NativeView; nativeView.Indeterminate = view.Indeterminate;}
第四步
对应的实现iOS平台的Handler事件处理程序, 与 上步骤 相同, 对于事件 的处理细节则对应不同平台的逻辑处理
partial classMyProgressBarHandler: ViewHandler<MyProgressBar, UIProgressView>{protectedoverride UIProgressView CreateNativeView{returnnewUIProgressView(UIProgressViewStyle.Default); }staticvoidMapValue(MyProgressBarHandler handler, MyProgressBar view){var nativeView = handler.NativeView;nativeView.Progress = ( float)view.Value; }staticvoidMapForeground(MyProgressBarHandler handler, MyProgressBar view){var nativeView = handler.NativeView;nativeView.ProgressTintColor = view.Foreground?.ToNative;}

推荐阅读