Hide Application Bar Icon Programmatically in a WP

2020-02-04 02:31发布

问题:

I have a Windows Phone 7 application built in Silverlight. This application makes use of the application bar. If the has purchased the application, I want to hide one of the buttons in the application bar. However, I've noticed that the ApplicationIconButton class does not expose a "Visibility" property. At the same time, I did not see a way to dynamically populate the application bar at runtime.

Can anybody provide some insight into this? Is this possible? If so, how?

Thanks!

回答1:

Application bar buttons work in an index-based way rather than object-based like you would expect. Therefore, you need to specify a button index whenever you want to perform a specific action on it (e.g. disable).

For example:

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

This being said, you can create new ApplicationBarIconButton instances and pass them to 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);
}

When removing buttons, you can simply use RemoveAt, given that you know the index of the button to remove:

ApplicationBar.Buttons.RemoveAt(0);


回答2:

I use the following method to alter the application bar buttons in my code:

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

The uriString is the relative path to the icon that I wish to display on the app button. You can probably adapt this code for your own scenarios.

Essentially, instead of setting a button visible or not, you have to remove the button (if it's there) or re-add it if it's not.