Как удалить или скрыть элемент панели инструментов в конкретной ошибке страницы: System.IndexOutOfRangeException: индекс находился за пределами массива

Я пытаюсь Remove() или Clear() ToolbarItems. Вот мой код, где я создаю ToolbarItem в MainPage.cs

public partial class MainPage : MasterDetailPage
{
   public ToolbarItem cCounter = new ToolbarItem() { Icon = "picture.png" };
   public ToolbarItem pPo = new ToolbarItem() { Text = "-" };

   public MainPage()
    {
        InitializeComponent();
        if (Device.OS == TargetPlatform.iOS)
        {
            provider.Clicked += iOS_Ppo_Clicked;
            ToolbarItems.Add(cCounter);
            ToolbarItems.Add(pPo);
        }
    }

    private void iOS_Ppo_Clicked(object sender, EventArgs e)
    { 
        OpenWindow();            
    }

    public async void OpenWindow()
    {
        if (await Common.WindowComands.CanOpenWindow<PPoPage>(Detail))
        {  
            page = new PPoPage(Page3.Allproviders);

            this.ToolbarItems.Clear(); // here I am getting error:Index was outside the bounds of the array 

            page.OnSelected += Page_OnSelected;
            await Detail.Navigation.PushAsync(page, false);             
        }   
    }
}

Изменить: когда я включил this.ToolbarItems.Clear(); в OpenWindowметод, который инициализирует открытие другой страницы и работает! Чистит все элементы панели инструментов, но, к сожалению, показывает эту ошибку:

System.IndexOutOfRangeException: Index was outside the bounds of the array.

Эти элементы должны исчезнуть только для iOS, как вы видите. Вот мой класс страницы, где мне бы хотелось Remove() эти ToolbarItems:

public partial class PPoPage : ContentPage
{
   public MainPage main { get; set; }

   private List<PPo> Pro;

   public PPoPage(List<PPo> po)
   {
      InitializeComponent();
      if (Device.OS == TargetPlatform.iOS)
      {
         Pro = po;
         CreateLayout();
         // HERE I WANT TO REMOVE TOOLBARITEMS FOR THIS PAGE
         this.ToolbarItem.Remove(main.cCounter); // here there is error
         this.ToolbarItems.Clear(); // this also doesn't work, because toolbar items still exist after this initialization.
      }
   }
}

В этом классе я пробовал оба подхода, но никто не работает. Благодарим вас за ответы или предложения.

Ответы

Ответ 1

Прежде всего, я очень хочу поблагодарить за все ответы и предложения, которые я попытался реализовать как ответы на мое решение, но, к сожалению, безуспешно. Основная причина, по которой я не фокусировался на классе, где я реализовал всю панель инструментов iOS, и это было в моем проекте iOS.

На панели инструментов iOS я просто написал простой оператор if:

var currentPage = ((NavigationPage)Element).CurrentPage;
if (currentPage != null && currentPage is ContentPage)
{
    TopViewController.NavigationItem.RightBarButtonItems = new UIBarButtonItem[0];
                return;
}

Ответ 2

Проблема здесь в том, что PPoPage - это другой экземпляр страницы для MainPage и, следовательно, содержит свою собственную коллекцию ToolbarItems.

Попробуйте main.ToolbarItems.Clear() вместо this.ToolbarItems.Clear(), если предполагается, что свойство main было инициализировано, или вы можете получить доступ к текущей странице верхнего уровня с помощью Xamarin.Forms.NavigationPage.CurrentPage.