Скрыть значок панели приложений Программно в приложении WP7 Silverlight?

У меня есть приложение Windows Phone 7, встроенное в Silverlight. Это приложение использует панель приложений. Если купило приложение, я хочу скрыть одну из кнопок на панели приложений. Однако я заметил, что класс ApplicationIconButton не предоставляет свойство "Видимость". В то же время я не видел возможности динамически заполнять панель приложений во время выполнения.

Может ли кто-нибудь объяснить это? Это возможно? Если да, то как?

Спасибо!

Ответы

Ответ 1

Кнопки панели приложений работают как на основе индексов, так и на основе объектов, как и следовало ожидать. Поэтому вам нужно указать индекс кнопки, когда вы хотите выполнить определенное действие (например, отключить).

Например:

ApplicationBarIconButton b = (ApplicationBarIconButton)ApplicationBar.Buttons[0];
b.IsEnabled = false;

При этом вы можете создавать новые экземпляры ApplicationBarIconButton и передавать их в ApplicationBar:

for (int i = 0; i < 2; i++)
{
    ApplicationBarIconButton b = new ApplicationBarIconButton();
    b.Text = i.ToString();
    b.IconUri = new Uri("/Images/icon1.png", UriKind.Relative);
    ApplicationBar.Buttons.Add(b);
}

При удалении кнопок вы можете просто использовать RemoveAt, учитывая, что вы знаете индекс кнопки для удаления:

ApplicationBar.Buttons.RemoveAt(0);

Ответ 2

Я использую следующий метод для изменения кнопок панели приложений в моем коде:

private void UpdateAppbarButton(int index, string uriString, string text, bool visibility, EventHandler handler)
{
    ApplicationBarIconButton button1 = null;

    if (ApplicationBar.Buttons.Count > index)
    {
        button1 = ApplicationBar.Buttons[index] as ApplicationBarIconButton;
    }

    if (button1 != null)
    {
        {
            ApplicationBar.Buttons.Remove(button1);
        }
    }
    if (visibility == true)
    {
        button1 = new ApplicationBarIconButton(new Uri(uriString, UriKind.Relative));
        button1.Text = text;
        button1.Click += handler;
        ApplicationBar.Buttons.Insert(index, button1);
    }
}

uriString - относительный путь к значку, который я хочу отобразить на кнопке приложения. Вероятно, вы можете адаптировать этот код для своих сценариев.

По существу, вместо того, чтобы нажимать кнопку или нет, вам нужно удалить кнопку (если она есть) или повторно добавить ее, если она не указана.