如何在WP7 Silverlight应用程序中以编程方式隐藏应用程序条图标?

13

我有一个用 Silverlight 构建的 Windows Phone 7 应用程序。该应用程序使用应用栏。如果用户已购买该应用程序,则我希望隐藏应用栏中的一个按钮。然而,我注意到 ApplicationIconButton 类没有公开“Visibility”属性。同时,我没有看到在运行时动态填充应用栏的方法。

是否有人能够提供一些见解?这可能吗?如果是,如何实现?

谢谢!

2个回答

32

应用程序栏按钮的工作方式是基于索引而不是对象,这与您预期的不同。 因此,每当您想对特定按钮执行特定操作(例如禁用)时,都需要指定一个按钮索引。

例如:

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

13

我在代码中使用以下方法来修改应用程序栏按钮:

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是我希望在应用程序按钮上显示的图标的相对路径。您可以根据自己的情况调整此代码。

本质上,您不是设置按钮是否可见,而是删除该按钮(如果存在),或者在不存在时重新添加它。


我需要将ApplicationBarIconButton的IconUri设置为http URL。这种做法可行吗?我收到了以下异常信息:"路径不能是绝对路径"。 - Sujiz
嗨Sujiz,你设置了UriKind参数为绝对路径吗?虽然我不确定HTTP地址是否有效,但值得快速尝试一下。 - Dr Herbie
我已将UriKind设置为absolute,但对我没有起作用。是否有其他解决方案可以从http url加载应用程序栏图标? - Sujiz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接