2009-08-20 14 views
18

Estoy creando una aplicación de Windows (WPF) y C#. En mi opinión, tengo que agregar algunos diseños como buscar una carpeta, visualizar los archivos en la carpeta en una vista de lista ... etcCómo crear un panel colapsable en WPF

Mi requerimiento es: Los paneles mencionados anteriormente deberían ser paneles plegables, supongo, no tenemos la opción de panel plegable en wpf.

Tengo que crear un control personalizado para esto? Si es así, por favor sugiérame cómo hacer esto?

+7

Vaccano, mala forma. – Kilhoffer

+0

@Vaccano: la respuesta ha sido aceptada, debe eliminar su voto negativo ahora –

Respuesta

53

El control Expander puede ser lo que estás buscando. De MSDN:

Expander Clase

Representa el control que muestra un encabezado que tiene una ventana plegable que muestra el contenido.

+0

Gracias por el enlace. Pero esto no se ve como un panel colapsable en ASP.NET. En realidad, no estoy usando controles ASP.NET en mi proyecto. Pero si quiero ese tipo de control en WPF, ¿cómo se puede lograr esto? Pls ayúdame Gracias Ramm – Ramm

+1

No estoy seguro de lo que quiere decir: Expander * es * un control WPF y parece que se comporta como un panel colapsable. ¿Puedes explicar qué funcionalidad te falta? –

5

¿Le gusta esto?

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="auto"/> 
     <RowDefinition Height="2*"/> 
    </Grid.RowDefinitions> 
    <Border Background="Red" Height="12" VerticalAlignment="Top" MouseEnter="StackPanel_MouseEnter" MouseLeave="StackPanel_MouseLeave"></Border> 
</Grid>  

C# código detrás

private void StackPanel_MouseEnter(object sender, MouseEventArgs e) 
    { 
     Border sp = sender as Border; 
     DoubleAnimation db = new DoubleAnimation(); 
     //db.From = 12; 
     db.To = 150; 
     db.Duration = TimeSpan.FromSeconds(0.5); 
     db.AutoReverse = false; 
     db.RepeatBehavior = new RepeatBehavior(1); 
     sp.BeginAnimation(StackPanel.HeightProperty, db); 
    } 

    private void StackPanel_MouseLeave(object sender, MouseEventArgs e) 
    { 
     Border sp = sender as Border; 
     DoubleAnimation db = new DoubleAnimation(); 
     //db.From = 12; 
     db.To = 12; 
     db.Duration = TimeSpan.FromSeconds(0.5); 
     db.AutoReverse = false; 
     db.RepeatBehavior = new RepeatBehavior(1); 
     sp.BeginAnimation(StackPanel.HeightProperty, db); 
    } 
} 

Se puede utilizar cualquier elemento de control como la rejilla, apilar, muelle, frontera ...

+0

¿Qué tal un ejemplo usando VisualStateManager? – avantprime

+0

¡Esto es genial! Simple, efectivo ... ¡Gracias! –

Cuestiones relacionadas