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
相关产品推荐
相关产品推荐

