当前位置: 首页 > news >正文

自己做网站系统教程谷德设计网景观设计

自己做网站系统教程,谷德设计网景观设计,网站内容与目录结构,信息流广告加盟简介MAUI中使用Handler体系来处理不同平台的原生控件实现, 即对应的, 如果我们想要创建控件, 只需要创建基于不同平台的Handler即可。那么下面主要教大家如何通过创建Handler(事件处理程序)来构建自己的控件。开始下面, 将通过创建一个进度条控件案例, 来演示如何在MAUI项目中创… 简介MAUI中使用Handler体系来处理不同平台的原生控件实现, 即对应的, 如果我们想要创建控件, 只需要创建基于不同平台的Handler即可。那么下面主要教大家如何通过创建Handler(事件处理程序)来构建自己的控件。开始下面, 将通过创建一个进度条控件案例, 来演示如何在MAUI项目中创建平台控件并且使用它。假设控件包含基础的三项功能, 进度条颜色(Foreground)、进度条当前值(Value)、进度条模式(Indeterminate)1.第一步(声明控件类)首先, 创建MyProgressBar类, 定义对应的依赖属性internal class MyProgressBar : View{public static readonly BindableProperty ForegroundProperty BindableProperty.Create(nameof(Foreground),typeof(Color),typeof(MyProgressBar),Colors.Transparent);public static readonly BindableProperty ValueProperty BindableProperty.Create(nameof(Value),typeof(double),typeof(MyProgressBar),0.0);public static readonly BindableProperty IndeterminateProperty BindableProperty.Create(nameof(Indeterminate),typeof(bool),typeof(MyProgressBar),false);public Color Foreground{get { return (Color)GetValue(ForegroundProperty); }set { SetValue(ForegroundProperty, value); }}public double Value{get { return (double)GetValue(ValueProperty); }set { SetValue(ValueProperty, value); }}public bool Indeterminate{get { return (bool)GetValue(IndeterminateProperty); }set { SetValue(IndeterminateProperty, value); }}}2.第二步(创建标准处理程序)有了控件的标准属性定义之后, 接下来就是定义标准的Handler处理程序, 其中包含控件属性映射器及构造函数, 如下所示:partial class MyProgressBarHandler{public static PropertyMapperMyProgressBar, MyProgressBarHandler HorizontalProgressBarMapper new(ViewHandler.ViewMapper){[nameof(MyProgressBar.Value)] MapValue,[nameof(MyProgressBar.Foreground)] MapForeground, [nameof(MyProgressBar.Indeterminate)] MapIndeterminate};public MyProgressBarHandler(PropertyMapper mapper): base(mapper){}public MyProgressBarHandler() : base(HorizontalProgressBarMapper){}}3.第三步(创建平台处理程序)在属性映射器中, 我们可以很轻松看见对应了三个属性的事件处理程序, 但是目前并没有定义它, 这意味着你需要在不同平台下分别实现对应的三个事件处理程序, 所以很快阿, 赶紧在Platforms Android Controls 下定义了一个MyProgressBarHandler, 如下所示:接着继承于ViewHandler并且与原生安卓ProgressBar关联。using Android.Widget;partial class MyProgressBarHandler :ViewHandlerMyProgressBar, ProgressBar{ }重写CreateNativeView(这是创建本地控件最开始的地方)protected override ProgressBar CreateNativeView(){return new ProgressBar(Context, null, Android.Resource.Attribute.ProgressBarStyleHorizontal){Indeterminate true,Max 10000,}; }紧接着, 实现三个事件处理程序方法, MapValue、MapForeground、MapIndeterminatestatic void MapValue(MyProgressBarHandler handler, MyProgressBar view){var nativeView handler?.NativeView;nativeView.Progress (int)(view.Value * Max);}static void MapForeground(MyProgressBarHandler handler, MyProgressBar view){UpdateForeground(handler?.NativeView, view.Foreground);static void UpdateForeground(ProgressBar nativeProgressBar, Color color){if (color null){(nativeProgressBar.Indeterminate ? nativeProgressBar.IndeterminateDrawable :nativeProgressBar.ProgressDrawable)?.ClearColorFilter();}else{var tintList ColorStateList.ValueOf(color.ToNative());if (nativeProgressBar.Indeterminate)nativeProgressBar.IndeterminateTintList tintList;elsenativeProgressBar.ProgressTintList tintList;}}}static void MapIndeterminate(MyProgressBarHandler handler, MyProgressBar view){var nativeView handler?.NativeView;nativeView.Indeterminate view.Indeterminate;}4. 对应的实现iOS平台的Handler事件处理程序, 与上步骤相同, 对于事件的处理细节则对应不同平台的逻辑处理。partial class MyProgressBarHandler :ViewHandlerMyProgressBar, UIProgressView{protected override UIProgressView CreateNativeView() {return new UIProgressView(UIProgressViewStyle.Default);}static void MapValue(MyProgressBarHandler handler, MyProgressBar view) {var nativeView handler.NativeView;nativeView.Progress (float)view.Value;}static void MapForeground(MyProgressBarHandler handler, MyProgressBar view) {var nativeView handler.NativeView;nativeView.ProgressTintColor view.Foreground?.ToNative();} static void MapIndeterminate(MyProgressBarHandler handler, MyProgressBar view) {//...}}5.打开MauiProgram文件, 添加AddHandlerpublic static MauiApp CreateMauiApp(){var builder MauiApp.CreateBuilder();builder.UseMauiAppApp().ConfigureFonts(fonts {fonts.AddFont(OpenSans-Regular.ttf, OpenSansRegular);}).ConfigureMauiHandlers(handler {handler.AddHandler(typeof(MyProgressBar), typeof(MyProgressBarHandler));}); return builder.Build();}6.界面中,分别声明MAUI原生控件与自定义控件ContentPage xmlnshttp://schemas.microsoft.com/dotnet/2021/mauixmlns:xhttp://schemas.microsoft.com/winfx/2009/xamlx:ClassMAUIRender.MainPagexmlns:myclr-namespace:MAUIRender xmlns:ctorclr-namespace:MAUIRender.Controls BackgroundColor{DynamicResource SecondaryColor}GridStackLayoutProgressBar Progress30 ProgressColorRed/ctor:MyProgressBar IndeterminateTrueValue600 ForegroundGreen //StackLayout/Grid /ContentPage运行实际效果:总结通过利用Handler来处理不同平台控件的行为, 与控件本身解耦并且更加容器支持更多的平台。
http://www.zqtcl.cn/news/123560/

相关文章:

  • 网站可以自己做温州制作手机网站
  • 根河企业网站建设房地产如何做网站推广
  • 东莞个人网站建设南宁网站制作公
  • 网站推广seo是什么上海市人力资源网官网
  • 玉溪做网站的公司delphi xe10网站开发
  • 使用vue做的网站有哪些企业门为什么要建设门户网站
  • 上海移动云网站建设在门户网站上爆光怎么做
  • 网站建设开票内容百度浏览器广告怎么投放
  • 深圳公司网站建立小程序商店制作
  • 网站建设知识网犀牛云做网站多少钱
  • 东莞seo优化推广重庆做网络优化公司电话
  • 网站建设的设计思路高校建设网站的特色
  • 宁波网站建设八宝山做网站的公司
  • 哪里有网站建设多少钱网站建设哪家服务态度好
  • 白云区网站开发公司备案不关闭网站的方法
  • 男的做那个视频网站家用电脑可以做网站服务器
  • 网站建设的行业客户烟台市未成年思想道德建设网站
  • 设计个网站要多少钱鼓楼网站开发
  • 东莞外贸网站搭建制作北京app开发制作
  • 优化网站公司外包微信商城怎么开店
  • 网站设计的导航栏怎么做东莞seo网络优化
  • wordpress直接上传视频网站吗做网站软件
  • 电脑维修网站模板下载来个网站吧好人一生平安2021
  • 做公益选哪个网站好网站建设方案多少钱
  • 丰台做网站的公司vs2015 手机网站开发
  • 宝思哲手表网站qq官网登录入口网页版
  • 二手书网站开发设计太原建设网站的公司
  • 江门网站seo推广qq代挂网站建设
  • 合肥制作网站企业做文字logo的网站
  • php 网站提速有没有帮人做简历的网站