MAUI:如果事件是内部事件,则无法通过XAML添加事件处理程序

irtuqstp  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(144)

我发现了一个意外的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还是我遗漏了什么?

oxf4rvwz

oxf4rvwz1#

当修改器改为Private时,也会抛出一个XamlParseException,这是Github中Private EventHandlers throw an exception on XAML-defined custom control的已知问题,你可以跟进。
此外,我注意到您报告了Github上的一个新问题:https://github.com/dotnet/maui/issues/12566,您可以进行跟进。

相关问题