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

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

Кто-нибудь может дать некоторое представление об этом? Это возможно? Если так, то как?

Спасибо!

2 ответа

Решение

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

Например:

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);

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

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 - это относительный путь к значку, который я хочу отобразить на кнопке приложения. Вы, вероятно, можете адаптировать этот код для своих собственных сценариев.

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

Другие вопросы по тегам