Как получить количество кнопок на панели приложений Windows Phone

У меня есть панель приложений в моем приложении Windows Phone 8.1 Silverlight. Он содержит одну ApplicationBarButton, и когда пользователь прокручивает до определенной точки в LongListSelector, к ApplicationBar добавляется еще одна кнопка, например:

for (int i = 0; i < 1; i++)
{
     ApplicationBarIconButton scrollToToday = new ApplicationBarIconButton();
     scrollToToday.Text = "idag";
     scrollToToday.IconUri = new Uri("/Assets/AppBar/today_dark.png", UriKind.Relative);
     parent.ApplicationBar.Buttons.Add(scrollToToday);
}

Когда пользователь затем прокручивается обратно к начальной точке исходной точки, я удаляю ее с помощью:

parent.ApplicationBar.Buttons.RemoveAt(1);

Но приложение вылетает, когда достигает этой строки кода при запуске приложения, поскольку приложение запускается в исходной начальной точке, а затем нет второй кнопки для удаления. Я думаю, это связано с тем, что я сначала должен проверить, что если ApplicationBar содержит более одной кнопки, можно удалить кнопку с индексом 1. Но как мне это сделать?


person Oskariagon    schedule 24.04.2015    source источник


Ответы (2)


Во-первых, вам не нужен цикл for для добавления кнопки, так как вы добавляете только одну:

 ApplicationBarIconButton scrollToToday = new ApplicationBarIconButton();
 scrollToToday.Text = "idag";
 scrollToToday.IconUri = new Uri("/Assets/AppBar/today_dark.png", UriKind.Relative);
 parent.ApplicationBar.Buttons.Add(scrollToToday);

Затем, если я правильно понимаю, вы хотите удалить последнюю кнопку, если их больше одной. Если это так, вы можете использовать этот код:

var count = parent.ApplicationBar.Buttons.Count;

if (count >= 2)
{
    parent.ApplicationBar.Buttons.RemoveAt(count - 1);
}

(хранение count во временной переменной не обязательно, я просто сделал это для удобства чтения)

person Kevin Gosse    schedule 24.04.2015

Сначала проверьте количество кнопок, для этого вам понадобится Linq:

 using System.Linq;

 ...

 if(parent.ApplicationBar.Buttons.Count() > 1)
      parent.ApplicationBar.Buttons.RemoveAt(1);
person thumbmunkeys    schedule 24.04.2015
comment
«System.Collections.IList» не содержит определения для «Count», и не может быть найден метод расширения «Count», принимающий первый аргумент типа «System.Collections.IList», ответ @KooKiz правильный для меня. - person Oskariagon; 24.04.2015
comment
как я уже сказал, вам нужен Linq, добавьте это в начало вашего файла using System.Linq; - person thumbmunkeys; 24.04.2015