2

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

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<IEntry, EntryHandler>”类型的表达式 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 活动

正如我所说,我完全遵循了文档,但仍然是这个错误。我读过其他人也有这个问题。任何人都可以帮忙吗?

4

1 回答 1

4

似乎通过这里这里的这个 pr 在这个领域做出了一些重大的改变。

从看起来这已经完成,以便您可以在映射器中级联自定义AppendToMappingPrependToMapping或完全修改整个映射ModifyMapping

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

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

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

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 页面

于 2021-11-25T14:25:49.923 回答