2009-08-20 5 views
18

Ich erstelle eine Windows-Anwendung (WPF) und C#. Aus meiner Sicht muss ich einige Layouts hinzufügen, wie das Durchsuchen eines Ordners, das Anzeigen der Dateien im Ordner in einer Listenansicht ... usw.So erstellen Sie ein reduzierbares Panel in WPF

Meine Anforderung ist: Die oben genannten Panels sollten zusammenklappbare Panels sein, denke ich, Wir haben nicht die Option der zusammenklappbaren Platte in WPF.

Ich muss ein benutzerdefiniertes Steuerelement dafür erstellen? Wenn ja, bitte schlagen Sie mir vor, wie man das macht?

+7

Vaccano, schlechte Form. – Kilhoffer

+0

@Vaccano: Die Antwort wurde akzeptiert, Sie sollten jetzt Ihren Downvote entfernen –

Antwort

53

Die Expander-Steuerung ist möglicherweise das, wonach Sie suchen. Von MSDN:

Expander Klasse

Stellt die Steuerung, die einen Header anzeigt, die einen zusammenklappbaren Fenster Inhalt anzeigt hat.

+0

Danke für den Link. Das sieht jedoch nicht wie ein reduzierbares Panel in ASP.NET aus. Eigentlich verwende ich nicht ASP.NET-Steuerelemente in meinem Projekt. Aber wenn ich diese Art von Kontrolle in WPF möchte, wie kann dies erreicht werden? Pls helfen mir Danke Ramm – Ramm

+1

Ich bin mir nicht sicher, was Sie meinen - Expander * ist * ein WPF-Steuerelement und scheint sich wie ein zusammenklappbares Panel zu benehmen. Können Sie mir bitte erklären, welche Funktionalität Ihnen fehlt? –

5

Gefällt mir das?

<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# -Code hinter

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

Sie ein beliebiges Element Steuerung wie Gitter verwenden können, Stapel, Dock, Grenze ...

+0

Wie wäre es mit einem Beispiel mit VisualStateManager? – avantprime

+0

Das ist großartig !! Einfach, effektiv .. Danke! –