.NET Maui 自定义处理程序不起作用,官方文档有误吗?

Posted

技术标签:

【中文标题】.NET Maui 自定义处理程序不起作用,官方文档有误吗?【英文标题】:.NET Maui Custom Handlers not working, official docs is wrong? 【发布时间】:2022-01-03 17:42:42 【问题描述】:

我正在使用 .NET MAUI 制作应用程序,并且我正在尝试为特定的控件实例实现自定义处理程序(例如,某些条目应该使用我创建的自定义处理程序)。为此,我关注了官方的 MS docs。以下是他们告诉我要使用的设置:

1.首先制作Entry控件的子类:

using Microsoft.Maui.Controls;

namespace MyMauiApp

    public class MyEntry : Entry
    
    

2.然后我自定义 EntryHandler 以对 MyEntry 实例执行所需的修改:

using Microsoft.Maui;
using Microsoft.Maui.Controls;
using Microsoft.Maui.Graphics;

namespace MauiApp1

    public partial class App : Application
    
        public App()
        
            InitializeComponent();

            Microsoft.Maui.Handlers.EntryHandler.EntryMapper[nameof(IView.Background)] = (handler, view) =>
            
                if (view is MyEntry)
                
#if __android__
                    handler.NativeView.SetBackgroundColor(Colors.Red.ToNative());
#elif __ios__
                  handler.NativeView.BackgroundColor = Colors.Red.ToNative();
                  handler.NativeView.BorderStyle = UIKit.UITextBorderStyle.Line;
#elif WINDOWS
                  handler.NativeView.Background = Colors.Red.ToNative();
#endif
                
            ;
        
    

问题:这给了我以下错误:

严重性代码描述项目文件行抑制状态 错误 CS0021 无法将带有 [] 的索引应用于类型表达式 'IPropertyMapper' MyMauiApp (net6.0-android), MyMauiApp (net6.0-ios), MyMauiApp (net6.0-windows10.0.19041) C:\Users\xxxxxx\source\repos\MyMauiApp\MyMauiApp\App.xaml.cs 24 活动

正如我所说,我完全按照文档进行操作,但仍然出现此错误。我读过其他人也有这个问题。有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

通过此公关here 和here,似乎已在该领域进行了一些重大更改。

从看起来已经完成的情况来看,您可以使用AppendToMappingPrependToMapping 在映射器中级联自定义,或者使用ModifyMapping 修改整个映射。

这里不解释所有变化,让我们专注于您的情况。这意味着不是这条线Microsoft.Maui.Handlers.EntryHandler.EntryMapper[nameof(IView.Background)] = (handler, view) =>

您现在应该将其声明为:Microsoft.Maui.Handlers.EntryHandler.EntryMapper.AppendToMapping(nameof(IView.Background), (handler, view) =>

请注意,您现在也应该在右括号上添加一个),从而制作完整的代码:

Microsoft.Maui.Handlers.EntryHandler.EntryMapper.AppendToMapping(nameof(IView.Background), (handler, view) =>

    if (view is MyEntry)
    
#if __ANDROID__
        handler.NativeView.SetBackgroundColor(Colors.Red.ToNative());
#elif __IOS__
        handler.NativeView.BackgroundColor = Colors.Red.ToNative();
        handler.NativeView.BorderStyle = UIKit.UITextBorderStyle.Line;
#elif WINDOWS
        handler.NativeView.Background = Colors.Red.ToNative();
#endif
    
);

我会看看我是否可以在这里和那里更新文档,希望这不会再次中断;)

编辑:为此更新了wiki page

【讨论】:

嗨杰拉德!这确实做到了。惊人的。感谢您的帮助。 PS:喜欢你的视频,继续努力! 谢谢!期待不久的视频! :D 太棒了。我很高兴我提出这个,会为很多人节省很多时间哈哈!

以上是关于.NET Maui 自定义处理程序不起作用,官方文档有误吗?的主要内容,如果未能解决你的问题,请参考以下文章

MAUI自定义 .NET MAUI XAML 页面中的布局

MAUI自定义 .NET MAUI XAML 页面中的布局

OnClientClick 自定义消息框之前 Onclick 事件处理程序不起作用

使用中间件的全局异常处理在 ASP.Net Core 应用程序中不起作用

MAUI Blazor踩坑日记3.Windows标题栏自定义颜色,运行时改变颜色

旧 ASP.Net 应用程序中的自定义错误页面不起作用