.NET MAUI 社区工具包 Popup PopupHandler 不兼容

Mar*_*kus 6 popup maui

我开始使用 .NET MAUI。我刚开始开发就遇到了问题。我想显示一个弹出窗口,并且我正在使用社区工具包。

我所做的只是:

我创建了一个新的 .NET MAUI 应用程序项目,安装了社区工具包 NuGet 包(当然还有启动类中的 .UseMauiCommunityToolkit)并为弹出窗口添加了一个 XAML 文件:

<?xml version="1.0" encoding="utf-8" ?>
<toolkit:Popup xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
               xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
               xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
               x:Class="TestApp.ProfilePopup">

    <VerticalStackLayout>
        <Label Text="This is a very important message!" />
    </VerticalStackLayout>

</toolkit:Popup>
Run Code Online (Sandbox Code Playgroud)

我没有这个弹出窗口的部分类

我刚刚修改了 MainPage 上的按钮以显示弹出窗口:

    private void OnCounterClicked(object sender, EventArgs e)
    {

        var popup = new ProfilePopup();

        this.ShowPopup(popup);

    }
Run Code Online (Sandbox Code Playgroud)

如果我运行此应用程序并单击按钮以显示弹出窗口,我将收到错误消息:

CommunityToolkit.Maui.Core.Handlers.PopupHandler found for TestApp.ProfilePopup is incompatible

如果我用 C# 创建弹出窗口,它会起作用:

    private void OnCounterClicked(object sender, EventArgs e)
    {
        var popup = new Popup
        {
            Content = new VerticalStackLayout
            {
                Children =
        {
            new Label
            {
                Text = "This is a very important message!"
            }
        }
            }
        };

        this.ShowPopup(popup);

    }
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

谢谢你!

马库斯

Too*_*eve 9

我重现了错误消息。

原因:“我没有这个弹出窗口的部分类”

那是行不通的。没有它,就没有InitializeComponent电话。结果不是有效的视图。


为了解决这个问题,

首先确保您已在以下位置注册了该工具包MauiProgram.cs

using CommunityToolkit.Maui;
...

builder.UseMauiApp<App>().UseMauiCommunityToolkit();
Run Code Online (Sandbox Code Playgroud)

那么你一定有

文件ProfilePopup.xaml.cs包含:

using CommunityToolkit.Maui;
...

builder.UseMauiApp<App>().UseMauiCommunityToolkit();
Run Code Online (Sandbox Code Playgroud)

我使用以下步骤生成自定义视图:

  1. 项目/添加新项目/.NET MAUI ContentView (XAML)。
  2. 命名为“MyView”。这会向项目添加两个文件:MyView.xamlMyView.xaml.cs.
  3. 在 中MyView.xaml,添加所需的 xmlns 并更改基类。
    曾是:
public partial class ProfilePopup : CommunityToolkit.Maui.Views.Popup
{
    public ProfilePopup()
    {
        InitializeComponent();
    }
}
Run Code Online (Sandbox Code Playgroud)

改成:

<ContentView xmlns=...
    ...
    x:Class=...>
...
</ContentView>
Run Code Online (Sandbox Code Playgroud)
  1. 在 中MyView.xaml.cs,更改基类。
    曾是:
<toolkit:Popup xmlns=
    ...
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
    x:Class=...>
...
</toolkit:Popup>
Run Code Online (Sandbox Code Playgroud)

改成:

public partial class ProfilePopup : ContentView
Run Code Online (Sandbox Code Playgroud)