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


}
重写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); }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;}
staticvoidMapIndeterminate(MyProgressBarHandler handler, MyProgressBar view){//...}}
第五步
打开MauiProgram文件, 添加AddHandler
publicstaticMauiApp CreateMauiApp {varbuilder = MauiApp.CreateBuilder; builder.UseMauiApp<App>.ConfigureFonts( fonts=> {fonts.AddFont( "OpenSans-Regular.ttf", "OpenSansRegular"); }).ConfigureMauiHandlers( handler=> {handler.AddHandler( typeof(MyProgressBar), typeof(MyProgressBarHandler)); }); returnbuilder.Build; }第六步
界面中,分别声明MAUI原生控件与自定义控件
< ContentPagexmlns= "http://schemas.microsoft.com/dotnet/2021/maui"xmlns:x= "http://schemas.microsoft.com/winfx/2009/xaml"x:Class= "MAUIRender.MainPage"xmlns:my= "clr-namespace:MAUIRender"xmlns:ctor= "clr-namespace:MAUIRender.Controls"BackgroundColor= "{DynamicResource SecondaryColor}"> < Grid> < StackLayout> < ProgressBarProgress= "30"ProgressColor= "Red"/> < ctor:MyProgressBarIndeterminate= "True"Value= "https://www.sohu.com/a/600"Foreground= "Green"/> </ StackLayout> </ Grid> </ ContentPage> 运行实际效果:
MAUI中构建跨平台原生控件实现

特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。