2010-11-20 12 views
13

Tengo una aplicación para Windows Phone 7 integrada en Silverlight. Esta aplicación hace uso de la barra de aplicaciones. Si ha comprado la aplicación, quiero ocultar uno de los botones en la barra de la aplicación. Sin embargo, me he dado cuenta de que la clase ApplicationIconButton no expone una propiedad de "Visibilidad". Al mismo tiempo, no vi una forma de poblar dinámicamente la barra de aplicaciones en tiempo de ejecución.¿Ocultar el icono de la barra de aplicaciones mediante programación en una aplicación WP7 de Silverlight?

¿Alguien puede darnos una idea de esto? es posible? ¿Si es así, cómo?

Gracias!

Respuesta

32

Los botones de la barra de aplicaciones funcionan de forma basada en índices en lugar de en función de los objetos, como cabría esperar. Por lo tanto, debe especificar un índice de botón siempre que desee realizar una acción específica en él (por ejemplo, deshabilitar).

Por ejemplo:

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

Dicho esto, se pueden crear nuevas instancias ApplicationBarIconButton y pasarlos a 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); 
} 

Al retirar los botones, puede simplemente usar RemoveAt, dado que saber el índice del botón para eliminar:

ApplicationBar.Buttons.RemoveAt(0); 
13

que utilizar el siguiente método para alterar los botones de la barra de aplicaciones en mi código:

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

El uriString es la ruta relativa al icono que desea mostrar en el botón de aplicaciones. Probablemente pueda adaptar este código para sus propios escenarios.

Esencialmente, en lugar de configurar un botón visible o no, debe quitar el botón (si está allí) o volver a agregarlo si no lo está.

+0

Necesito dar el IconUri para Appl icationBarIconButton como http url. es posible? Estoy obteniendo la siguiente excepción. "La ruta no puede ser absoluta". – Sujiz

+0

Hola Sujiz, ¿Has establecido que el parámetro UriKind sea absoluto? Aunque realmente no sé si las direcciones HTTP funcionarán o no, vale la pena intentarlo rápidamente. –

+0

he configurado el UriKind en modo absoluto, pero no funcionó para mí. ¿Hay alguna otra solución para cargar el icono de la barra de aplicaciones desde http url? – Sujiz

Cuestiones relacionadas