2011-03-29 15 views
8

Esta es probablemente una pregunta bastante básica, pero no he podido encontrar nada aquí ni en Google. Cualquier ayuda es apreciada.Orden de la pila de imágenes (índice z equivalente)

Existe una propiedad que determina el orden de apilamiento de los objetos (rectángulos de imágenes ect) en una aplicación de Windows Phone 7. Estoy agregando algo del código detrás y algo del xaml. Lo que busco básicamente es la propiedad z-index, pero eso no parece existir.

Respuesta

8

Si tiene los objetos en un lienzo, puede usar la propiedad Canvas.ZIndex para establecer el orden de apilamiento.

+2

¿También? ¿También después de qué? El orden del mensaje no está arreglado aquí. –

+0

No me di cuenta de eso al principio. Editado para eliminarlo. ¡Gracias! – Roy

+1

'Canvas.ZIndex' funciona no solo con Canvas, sino también con otros contenedores. Ver [mi respuesta] (http://stackoverflow.com/questions/5474293/windows-phone-7-stack-order-of-images/5474733#5474733). –

1

En el XAML, el orden predeterminado de los elementos es el inverso de cómo aparecen en el marcado (el último elemento en el XAML aparece en la parte superior de la pila).

Como prueba, escribí lo siguiente.

XAML:

<Window x:Class="Order.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Canvas Name="LayoutTest" Margin="0"> 
      <Label Background="Red" Margin="0,0,0,0" Content="Added in XAML"/> 
     </Canvas> 
    </Grid> 
</Window> 

Código:

public MainWindow() 
    { 
     InitializeComponent(); 

     for (int i = 0; i < 10; i++) 
     { 
      Label lbl = new Label(); 
      lbl.Height = 100d; 
      lbl.Width = 100d; 
      lbl.MouseLeftButtonUp += rec_MouseLeftButtonUp; 
      lbl.Content = "Label number " + i.ToString(); 
      lbl.Background = Brushes.White; 
      lbl.Foreground = Brushes.Black; 

      LayoutTest.Children.Add(lbl); 
     } 
    } 

    void rec_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
    { 
     Label obj = sender as Label; 
     if (null == obj) return; 
     obj.Visibility = Visibility.Collapsed; 
    } 

El resultado fue que los elementos añadidos en XAML aparecen en la parte inferior de la pila, en el orden descrito anteriormente. Los elementos añadidos en el código aparecen encima de ellos, y su orden es dictada por el orden en que se agregaron: el primer elemento agregado se encuentra en la parte inferior del pedido en particular, y se va subiendo en la pila a medida que se agregan.

Así, en el "fondo" de la pila es la etiqueta
"agregó en XAML", seguido por
"Número de etiqueta 0",
"etiqueta con el número 1",
... hasta ...
"Número de etiqueta 9" es el elemento superior inmediatamente visible.

¡Bother! Acabo de pasar 10 minutos demostrando lo equivocado. ;) La respuesta de Roy C a continuación es probablemente lo que estabas buscando, pero con un poco de suerte, esta respuesta será de alguna utilidad para alguien.

1

Utilice la propiedad adjunta Canvas.ZIndex. Debería funcionar con todos los contenedores de disposición, no solo Canvas.

En el gran .NET en realidad hay un Panel.ZIndex, lo que tiene más sentido, pero Canvas.ZIndex parece funcionar bien en WP7.

Cuestiones relacionadas