【问题标题】: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);
不要认为这是最好的方法,但这是我现在能想到的。