MAUI: После переопределения ArrangeOverride не работает кнопка в пользовательском элементе (в производном классе)

Я пытаюсь создать пользовательский элемент управления в Мауи из нескольких кнопок. Создал класс:

public class Page1 : StackLayout
{  
    int i, n=0;
    byte[] wdt = new byte[255];  
    public void Add(string t)  
    {  
      Button bt = new Button      {  
        Text = t, 
        BorderWidth = 1,
        BorderColor = Colors.Black,
        BackgroundColor = Colors.Transparent,
        TextColor = Colors.Black,
        Padding = new Thickness(2, 0),
        HeightRequest = 30,
        IsEnabled = true,        
      };  
      bt.Clicked += OnButtonClicked;  
      Children.Add(bt);  
      n++;  
    }
    protected override Microsoft.Maui.Graphics.Size MeasureOverride(double widthConstraint, double heightConstraint)
    {
      var size = base.MeasureOverride(widthConstraint, heightConstraint);
      var mySize = new Microsoft.Maui.Graphics.Size();
      i = 0;
      foreach (var c in this.Children)
      {
        wdt[i] = (byte)(c.DesiredSize.Width);
        i++;
      }
      return mySize;
    }
    protected override Microsoft.Maui.Graphics.Size ArrangeOverride(Rect bounds)
    {
      var lct = new Microsoft.Maui.Graphics.Point();
      Microsoft.Maui.Graphics.Size finalSize = new();
      int x = 0, y = 10;
      for (i = 0; i < n; i++)
      {
        lct.X = x;
        lct.Y = y;
        var c = Children[i];
        c.Arrange(new Rect(lct, c.DesiredSize));
        x += wdt[i] + 50;
        y += 40;
      }
      return finalSize;
    }  
    private void OnButtonClicked(object sender, System.EventArgs e)  
    {
      Button bt = (Button)sender;  
      if(bt.BackgroundColor== Colors.LightPink)bt.BackgroundColor = Colors.Transparent;else bt.BackgroundColor = Colors.LightPink;
    }

Код С# - главная страница:

public partial class MainPage : ContentPage
{
    public MainPage()
    { 
        InitializeComponent();
        Chld.Add("Button1");
        Chld.Add("Button2");
        Chld.Add("Button3");
    } 
}

XAML-код:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MauiButton"
             x:Class="MauiButton.MainPage">
      <local:Page1 x:Name="Chld"></local:Page1>
</ContentPage>

Работает на машине Windows. На телефоне (Android) без ArrangeOverride тоже работает. Но если я переопределяю ArrangeOverride, кнопки видны, но событие Clicked (OnButtonClicked) не работает. При нажатии на кнопку ничего не происходит. Кто-нибудь знает как решить эту проблему?


Ответы (0 шт):