【问题标题】:Custom Maui Handler control creates handler when used in xaml but when created with c# does not create the handler自定义 Maui Handler 控件在 xaml 中使用时会创建处理程序,但使用 c# 创建时不会创建处理程序
【发布时间】:2022-08-19 11:13:27
【问题描述】:

repro 是一个基于 maui 模板的小例子。 我创建了一个名为 MyButtonView 的按钮并更改了主页以使用该控件。

该按钮已创建并正确显示在页面上。但是当我尝试只创建控件时 var b = MyButtonView();处理程序未创建,我无法弄清楚如何创建它。

请注意,在源代码中,我已经实现了 clicked 事件以显示未创建处理程序的方式。我确定我错过了一些东西,但有人可以引导我朝着正确的方向前进吗?

Github repro

    标签: maui .net-maui maui-windows


    【解决方案1】:

    因此,如果控件一旦创建有一个空处理程序,您将需要调用 MyButtonView.ToHandler(mauiContext);听起来很简单,但是获取 mauiContext 有点痛苦。

    我能够做到这一点的唯一方法是在 MauiProgram.cs 中执行以下操作。这适用于 Windows,尚未在 iOS 上尝试过

        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
                fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
            })
            .ConfigureMauiHandlers(handlers =>
            {
                handlers.AddHandler<DtNavigationView, DtNavigationViewHandler>();
                handlers.AddHandler<DtWindowTabView, DtWindowTabViewHandler>();
                handlers.AddHandler<DtWindowTabItem, DtWindowTabItemHandler>();
            });
        builder.UseMauiEmbedding<Application>();
        var mauiapp = builder.Build();
        mauiContext = new MauiContext(mauiapp.Services);
        return mauiapp;
    

    现在您可以使用静态上下文将对象获取到处理程序,方法是使用 MyButtonView.ToHandler(MauiProgram.mauiContext);

    不要认为这是最好的方法,但这是我现在能想到的。

    【讨论】:

      猜你喜欢
      • 2011-06-30
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多