2011-05-15 8 views
7

En una aplicación para Windows Phone 7, uso un Pivot para la interfaz de usuario. Como uno de los puntos del pivote se inserta una página XAML, como:¿Es posible mostrar la barra de aplicaciones solo para un elemento de pivote?

<Pivot_Item> 
<myviews:a_page.xaml/> 
</Pivot_Item> 

Una barra de aplicaciones - una plantilla estándar - se usa dentro de esa página, ya que todo el pivote no lo necesita. Pero esto no funciona. Por ahora, solo pude activar la barra para cada elemento de Pivote o usarlo para una página independiente que no sea de pivote.

Respuesta

11

La forma más sencilla de hacer esto es simplemente para manejar el evento Pivot's LoadingPivotItem.

Assign que PivotItem un nombre:

<Pivot_Item Name="myPivotItem"> 
<myviews:a_page.xaml/> 
</Pivot_Item> 

En el código:

private void pivotMain_LoadingPivotItem(object sender, PivotItemEventArgs e) 
{ 
    if (e.Item == myPivotItem) 
     ApplicationBar.IsVisible = true; 
    else 
     ApplicationBar.IsVisible = false; 
} 
13

Por lo que sé - ApplicationBar asociado con su Page, pero Pivot es solo un control en su Page. Por lo tanto, ApplicationBar se asigna para toda la Page, independientemente de la pestaña Pivot que se muestre.

Puede hacerlo mediante la definición de diferentes bares de aplicación en la sección de recursos:

<phone:PhoneApplicationPage.Resources> 

    <shell:ApplicationBar x:Key="firstPivotTabApplicationBar" IsVisible="True"> 
     ... 
    </shell:ApplicationBar> 

    <shell:ApplicationBar x:Key="secondPivotTabApplicationBar" IsVisible="True"> 
     ... 
    </shell:ApplicationBar> 

</phone:PhoneApplicationPage.Resources> 

y procesamiento SelectionChanged evento en su control de pivote:

private void MainPagePivot_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    string pivotResource; 

    switch (_mainPagePivot.SelectedIndex) 
    { 
     case 0: 
      pivotResource = "firstPivotTabApplicationBar"; 
      break; 

     case 1: 
      pivotResource = "secondPivotTabApplicationBar"; 
      break; 

     default: 
      throw new ArgumentOutOfRangeException(); 
    } 

    ApplicationBar = (ApplicationBar)Resources[pivotResource]; 
} 
+0

+1 porque esto me pareció muy intuitivo. – Subby

2

Aunque es posible cargar el ApplicationBar sólo cuando se muestra un PivotItem específica este es un comportamiento no estándar. Como regla general, generalmente no es bueno sorprender al usuario con un comportamiento no estándar.

El hecho de que intente hacer esto sugiere que una arquitectura diferente para su aplicación puede ser más apropiada. Si realmente debe hacerlo de esta manera, asegúrese de comprender: las razones por las cuales esto generalmente no se hace; las implicaciones de hacerlo; cuáles son las alternativas; y por qué las alternativas no son apropiadas.

+2

Este ya no es el caso en WP 7.5. Varias de las aplicaciones integradas ahora muestran una barra de aplicación en un pivote y luego la esconden en otra. Mira el centro de Personas para ver un ejemplo. El pivote Novedades oculta la barra de la aplicación. Pero cuando las personas + y la búsqueda son visibles. –

+0

@Jason Short, tienes razón, hasta cierto punto. El comportamiento de algunas aplicaciones nativas sí cambió en Mango. Sin embargo, la barra de aplicaciones nunca se oculta, sino que se cambia a un estado 'Minimizado' cuando no hay botones relevantes para el contenido de un solo elemento. –

3

Prueba esto ... añade la siguiente función para su archivo xaml.cs de PivotPage, y asegurarse de que añadir el evento SelectionChanged utilizar esta función ...

private void Pivot_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    switch (((Pivot)sender).SelectedIndex) 
     { 
      case 0: 
       ApplicationBar.IsVisible = true; 
       break; 

      case 1: 
       ApplicationBar.IsVisible = false; 
       break; 
    } 
} 

Cambiar el caso en base a los elementos de pivote quieres mostrar la barra de aplicaciones. Funciona para mí y maneja la minimización de la barra de aplicaciones.

Cuestiones relacionadas