我发现了一个意外的XAML解析器行为。以下是MAUI项目中的一个页面:
<?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>
local:MyView
为:
namespace MauiApp1;
class MyView: View
{
public event EventHandler MyEvent;
}
请注意事件的public
修饰符。在我将修饰符更改为internal
之前,这是一个完全可以工作的项目。页面和MyView
是同一程序集的实体,因此修饰符的更改应该不会影响应用程序。但是,它会导致从MyPage.InitializeComponent
调用的LoadFromXaml
方法抛出XamlParseException
。使用internal
修饰符,我仍然可以通过C#成功地添加事件处理程序,但不能通过XAML。
我决定找出这种行为在原则上是否是XAML固有的。事实上,事实证明并非如此。例如,WPF不介意通过XAML向内部事件添加处理程序。
因此,我想知道:这是MAUI开发人员的bug还是我遗漏了什么?
1条答案
按热度按时间oxf4rvwz1#
当修改器改为
Private
时,也会抛出一个XamlParseException
,这是Github中Private EventHandlers throw an exception on XAML-defined custom control的已知问题,你可以跟进。此外,我注意到您报告了Github上的一个新问题:https://github.com/dotnet/maui/issues/12566,您可以进行跟进。