Я обнаружил неожиданное поведение синтаксического анализатора 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
являются объектами одной сборки, поэтому изменение модификатора не должно влиять на приложение. Однако это приводит к тому, что метод LoadFromXaml
, вызываемый из MyPage.InitializeComponent
, выдает XamlParseException
. С модификатором internal
я все еще могу успешно добавить обработчик событий через C#, но не через XAML.
Я решил выяснить, присуще ли такое поведение XAML в принципе. На самом деле оказалось, что это не так. Например, WPF не возражает против добавления обработчиков внутренних событий через XAML.
Поэтому хотелось бы узнать: это баг разработчиков MAUI или я что-то упускаю?
При изменении модификатора на Private
он также выдает XamlParseException
. И это известная проблема Частные обработчики событий выдают исключение для пользовательского элемента управления, определенного XAML в Github, вы можете следить за этим.
Кроме того, я заметил, что вы сообщили о новой проблеме на Github: https://github.com/dotnet/maui/issues/12566 и вы можете следить за ней.
@GinormousIde Спасибо за ваш ответ! Я добавил сообщение о вашей проблеме в свой пост, пожалуйста, примите его, так как это поможет другим, у кого есть похожая проблема! Заранее спасибо!
Спасибо за ваш ответ. Проблема, которую вы нашли, действительно похожа, но все же немного отличается. Я хотел опубликовать свою проблему на GitHub, но сначала решил спросить совета здесь, чтобы убедиться, что это действительно проблема, а не мое непонимание в этом вопросе.