.net maui 中的自定义控件和渲染器会发生什么?

divyesh_08

在我当前的 Xamarin.Forms 项目中,我为不同的需求创建了许多渲染器。现在 9 月毛伊岛即将到来,我们必须将我们的项目迁移到那里。那么渲染器会发生什么?它会按原样工作还是我们不需要渲染器?

杰拉尔德·韦尔斯路易斯

在 .NET MAUI 中,渲染器的概念将消失,取而代之的是处理程序架构。渲染器与实际控件和支持的平台耦合得太紧,最重要的是(或者可能正因为如此),它们依赖反射等,速度很慢。

.NET MAUI 如此令人兴奋的很大一部分原因是整个架构将发生变化。现在,将有处理程序而不是渲染器,它们基本上一次处理一个属性,并且在处理程序和控件之间添加了一个抽象。这很重要,因为现在可以更轻松地实现后端(想想 iOS、Android,还有 SkiaSharp 或其他)。

至于你的问题:可能有不同的迁移路径。您可以按原样重复使用当前现有的自定义渲染器。应该有非常少的代码更改。Xamarin.Forms/.NET MAUI 团队努力实现兼容层来实现这一点。但是,您从切换到 .NET MAUI 中获得的好处有限,它会给您一些时间来重写这些渲染器,并且仍然能够发布您的应用程序。尽管应该有足够的时间,但 Xamarin.Forms 仍然支持到 2022 年 11 月。

在不涉及太多技术细节的情况下,Startup.cs在 .NET MAUI 项目的类中重用当前的渲染器可能看起来像这样(完整代码在这里):


public void Configure(IAppHostBuilder appBuilder)
{
    appBuilder
        .UseMauiApp<App>()
        .ConfigureMauiHandlers(handlers =>
              {
#if __ANDROID__
        handlers.AddCompatibilityRenderer(typeof(Label), typeof(MAUICustomRendererSample.Platforms.Android.MyLabelRenderer));
#endif
        })
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
        });
}

然后,当然,仍然有可能覆盖处理程序行为。根据您的需要,有多种方法可以做到这一点。只覆盖一个属性,现在比渲染器时代要容易得多。例如,看看下面的代码来改变按钮的背景颜色(完整代码在这里):

public void Configure(IAppHostBuilder appBuilder)
{
    appBuilder
        .UseMauiApp<App>()
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
        });

    #if __ANDROID__
                Microsoft.Maui.Handlers.ButtonHandler.ButtonMapper["MyCustomization"] = (handler, view) =>
                {
                    handler.NativeView.SetBackgroundColor(Android.Graphics.Color.Green);
                };
    #endif
}

要创建一个完整的自定义控件,工作量大致相同,只是方法不同。可以在此示例中找到从 Forms 到 .NET MAUI 的更多转换示例,Javier 一直致力于 Forms 和现在的 .NET MAUI。大多数其他事情(行为、效果等)只不过是替换代码中的一些命名空间,它们都应该起作用。

最重要的是,有一个升级助手可以帮助您完成更改项目和重命名命名空间等的大部分任务。更多信息可以在本月的社区站立会议中找到

根据您可用的项目大小和时间/预算,我个人首先将所有内容移植到 Forms 兼容层。这应该需要最少的努力。检查一切是否仍然按预期工作,您应该能够继续前进。之后,一个一个地开始用新的处理程序结构替换你的渲染器。

最后; 请注意,您可能正在使用的所有第三方库也都需要为 .NET 6 和/或 .NET MAUI 做好准备,因此请务必在开始升级之前检查这些库。

其他值得关注的好资源是正在处理的文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

.NET MAUI 边框和框架之间的区别

如何在 .NET MAUI 中隐藏 ImageButton

.NET Maui MVVM 选择器绑定 SelectedIndexChanged 事件

.net maui MVVM 从 CollectionView 绑定 SelectedItemCommand 和 SelectedItemParameter

.NET MAUI 中是否有保存文件的对话框?

如何在 .NET MAUI ViewModel 中显示警报

.NET MAUI/Xamarin.Forms 中的实体框架核心

MAUI:自定义条目

MAUI .NET 设置窗口大小

.Net MAUI 是否与 .NET Standard 2.0 兼容?

努力在 .Net 6 Web API 中添加自定义 NLog 布局渲染器

.NET Maui 自定義處理程序不起作用,官方文檔有誤?

.Net MAUI Blazor 应用程序 | 服务器端还是客户端?

在 .NET MAUI/Xamarin.Forms 中使用 MVVM 的手势识别器

.Net Maui MVVM - 在页面/视图打开时填充 CollectionView 的最佳方法是什么?

将 .NET Maui Preview 14 发布到 App Store 和 Google Play

如何在 .net MAUI 中删除不需要编译的平台?

.NET MAUI 标签绑定未在 C# 中更新 - 不是 MVVM

.net maui 无法获取 Observable 集合中的更新字段以在绑定集合视图中更新

.NET MAUI 无法在 Windows 上运行

Maui + Torque集群中的Hadoop

在 .NET CORE 3.1 Web API 项目中配置 nLog 的自定义布局渲染器

Log4Net自定义渲染器配置错误

将自定义对象发送到自定义布局渲染器NLog ASP.NET Core

在 .NET MAUI 应用程序中将服务注入视图模型

.net maui preview 10 不是單個項目

.NET MAUI Community Toolkit Popup PopupHandler 不兼容

如何在 Android 上使用来自 .NET MAUI 的 BroadcastReceiver?

如何使用 c# 而不是 xaml 创建 .Net Maui ContentPage?