You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI问题:事件为internal时无法通过XAML添加事件处理器

MAUI XAML解析器对internal事件的处理异常问题分析

问题现象

当自定义MyView的事件使用internal修饰符时,尽管页面与MyView属于同一程序集,XAML中绑定该事件会触发XamlParseException(在MyPage.InitializeComponent调用的LoadFromXaml方法中抛出);但通过C#代码手动添加事件处理器却能正常工作。而WPF中允许同一程序集内通过XAML绑定internal事件,不存在此问题。

代码示例

页面XAML代码

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MauiApp1"
             x:Class="MauiApp1.MyPage">
  <local:MyView MyEvent="MyView_MyEvent" />
</ContentPage>

自定义MyView代码(异常触发版本)

namespace MauiApp1;

class MyView: View
{
  internal event EventHandler MyEvent; // 改为internal后XAML绑定失败
}

当事件修饰符改为public时,XAML绑定可正常运行。

结论

这是MAUI XAML解析器的设计限制(或bug),并非你忽略了细节。MAUI的XAML解析逻辑在处理同一程序集内的internal事件绑定时,没有像WPF那样赋予生成代码足够的访问权限,导致运行时解析失败。

目前的临时解决方案:

  • 将事件修饰符改为public以支持XAML绑定
  • 放弃XAML绑定,在C#代码(如页面构造函数)中手动添加事件处理器

内容的提问来源于stack exchange,提问作者Ginormous Ide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 10:50:47