Laden...

WPF Window Teil ausklappen

Erstellt von yvesdaeschle vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.579 Views
Y
yvesdaeschle Themenstarter:in
35 Beiträge seit 2006
vor 10 Jahren
WPF Window Teil ausklappen

Hallo Zusammen

Ich hab eine Frage bezüglich der Technik um so etwas (Siehe Bild im Anhang) in WPF realisieren zu können.

Ich würde gerne am Rand meiner Anwendung die Möglichkeit haben, einen Teil auszuklappen (mir Kurven).

Wie gehe ich da vor? Ist sowas möglich?

Vielleicht kann mir da ja jemand weiterhelfen!

Vielen Dank!
Gruß, Yves

Yves

A
52 Beiträge seit 2011
vor 10 Jahren
Teil 1

ICh helfe dir gerne ist aber zuviel um es in einem Post zu schreiben ich teile deswegen den post in ein paar teile auf:

Zuerstmal den Background deines Windows null setzen
un natürlich Den WindowStyle auf None und den ResizeMode auf None setzen
und dass der hintergrund auf null gesetzt werden kann noch AllowsTransparency auf true

inetwa so sähe dann der Header aus


<Window x:Class="AusklappbaresFenster.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="AusklappbaresFenster"
        Height="600" Width="1000"
        
        WindowStyle="None"
        ResizeMode="NoResize"
        AllowsTransparency="True"
        Background="{x:Null}"
        >

Gruß Alexander Schill

A
52 Beiträge seit 2011
vor 10 Jahren
Teil 2

Als nächstes brauchst du erstmal wieder einen Hintergrund dafür empfielt es sich das standard grid zu nehmen

<Grid></Grid>

In diesem Grid erstellst du 2 spalten eine für das normale fenster und eine für die Potentielle Klappe

dazu nutz du den vorteil dass du beid en Grids die Eigenschaft Width auf auto setzten kannst somit wird die klappe nur angezeigt wenn auch eine Klappe da ist dazu später mehr die erste spalte setzt du auf Width="*"

falls dus nicht weißt * bedeutet in unserem falle dann aller platz der übrig ist also später der platz von links zur klappe

also sähe dein Grid schonmal so aus:


<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinitions Width="*"/>
<ColumnDefinitions Width="auto"/>
</Grid.ColumnDefinitions>
</Grid>

So In dem standardGrid erstellst du am besten ein Weiteres Grid oder Stackpanel oder was auch immer du wilst und gibst diesem Grid eine Backgroundeigenschaft in der Farbe deines gewünschten Hintergrundes (Bidler und farbverlauf geht natürlich auch)

Gruß Alexander Schill

A
52 Beiträge seit 2011
vor 10 Jahren
Teil 3

Nun kommen wir zu dem Kniffligeren Teil, den ich persönlcih über den Code steuern würde da dies aus meiner sicht (Bina cuh Anfänger in WPF) einafcher ist

Zuersteinmal musst du in deinem Standardgrid den Path Anlegen den du später als Klappe haben willst sinvoll wäre hier auch direkt einen Namen zu vergeben mit Name="Klappe" zb. Damit die Klappe am anfang auch versteckt ist stelle die Visibility eigenschaft auf COLLAPSED (nicht mit HIDDEN verwechseln)

Wie Man Paths anlegt solltest du selbst rausfidnen können falls dus wiedererwartend nciht hinbekommst kannst du dich gerne nochmal melden.

Was du jetzt noch benötigst ist eine Funktion die deine klappe auch anzeigt wenn amn darauf klickt, da auf deinem bild >> zus ehen sit denk ich du wirst das als bild machen.

Durch das Grid in deinem Standardgrid lässt sich dieses Image oder Label doer was du nehmen willst sehr leicht anordnen einfach Vertical align auf top und horizontal align uf right stellen und schonist es oben rechts. nun erstellst du ein event von PreviewMouseLeftButtonDown oder PreviewMouseLeftButtonUp je nachdem was dir lieber ist

In diesem Event toggelst du die visibility eigenschaft des Path in dem fall also:


private void Klappe(object sender, MouseButtonEventArgs e)
{
       if(Klappe.Visibility==Visibility.Collapsed){
               Klappe.Visibility=Visibility.Visible;
        }
        else{
             Klappe.Visibility=Visibility.Collapsed
        }
}

eine einzige sache fehlt nun noch und zwar musst du nicht nur die Klappe anzeigen, sondern auch dein Fenster um die Größe der Klappe erweitern bzw verkleinern, da sonst der Sonstige Inhalt deines Fensters kleiner wird und das sehr unschön wäre

also hast dus chlussendlich diese Funktion:


private void Klappe(object sender, MouseButtonEventArgs e)
{
       if(Klappe.Visibility==Visibility.Collapsed){
               Klappe.Visibility=Visibility.Visible;
               this.Width=this.Width+Klappe.ActualWidth;
        }
        else{
             Klappe.Visibility=Visibility.Collapsed;
             this.Width=this.Width-Klappe.ActualWidth;
        }
}

damit sollte die arbeit eigentlich getan sein falls es unstimmigkeiten doer weitere fragen gibt kannst du dcih gerne melden
hoffe ich hab es ausreichend ausführlich erklärt und konnte dir helfen

Gruß Alexander Schill