Laden...

[gelöst] ListBox dynamisch an Fenstergröße Anpassen

Erstellt von Annika234 vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.946 Views
A
Annika234 Themenstarter:in
13 Beiträge seit 2019
vor 4 Jahren
[gelöst] ListBox dynamisch an Fenstergröße Anpassen

Hallo Community,

ich hab gerade das Problem, dass ich in einer Listbox einige Einträge habe. Jetzt möchte ich. D.h. Die Lisbox hat mehr Inhalte als reinpassen. Soweit ist alles gut. Jetzt möchte ich allerdings, dass mehr Elemente Angezeigt werden sobald das Fenster länger gezogen wird und dewegen muss auch die Lsitbox länger werden. Ich habe der Listbox eine MinHeigt gegeben, die kleiner ist als die MinHeight des Fensters. Die Lsitbox wird jetzt immer so lang wie die Länge der Inhalte. Wenn ich das Fenster jetzt allerdings kleiner mache als die Listbox, dann erscheint die Scrollbar nichtmehr, sondern die Lisbox "schiebt" sich einfach unten aus dem Fenster raus.
Wie schaffe ich es, dass die Listbox immer maximal so lang ist wie das Fenster es zulässt + ein kleiner Abstand am unteren Rand.

Hier mal mein XAML-Code


  <Grid>
    <Grid.Resources>
      <GridLength x:Key="Width">20</GridLength>
      <sys:Double x:Key="MinWidth">20</sys:Double>
      <GridLength x:Key="Height">10</GridLength>
      <sys:Double x:Key="MinHeight">30</sys:Double>
    </Grid.Resources>
    <Grid.RowDefinitions>
      <RowDefinition Height="{StaticResource Height}"/>
      <RowDefinition Height="Auto" MinHeight="{StaticResource MinHeight}"/>
      <RowDefinition Height="{StaticResource Height}"/>
      <RowDefinition Height="Auto" MinHeight="{StaticResource MinHeight}"/>
      <RowDefinition Height="{StaticResource Height}"/>
      <RowDefinition Height="Auto" MinHeight="{StaticResource MinHeight}"/>
      <RowDefinition Height="{StaticResource Height}"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="{StaticResource Width}"/>
      <ColumnDefinition Width="Auto" MinWidth="{StaticResource MinWidth}"/>
      <ColumnDefinition Width="{StaticResource Width}"/>
      <ColumnDefinition Width="{StaticResource Width}"/>
      <ColumnDefinition Width="{StaticResource Width}"/>
      <ColumnDefinition Width="Auto" MinWidth="{StaticResource MinWidth}"/>
      <ColumnDefinition Width="{StaticResource Width}"/>
      <ColumnDefinition Width="Auto" MinWidth="{StaticResource MinWidth}"/>
      <ColumnDefinition Width="{StaticResource Width}"/>
      <ColumnDefinition Width="Auto" MinWidth="{StaticResource MinWidth}"/>
      <ColumnDefinition Width="{StaticResource Width}"/>
    </Grid.ColumnDefinitions>

    <ListBox ItemsSource="{Binding Konto}" Grid.Row="2" Grid.Column="1" Grid.RowSpan="4" Grid.ColumnSpan="3" MinHeight="100"  VerticalAlignment="Stretch" ScrollViewer.CanContentScroll="True"/>

  </Grid>

Das VerticalAlignment und den ScrollViewer habe ich auch schon unabhängig voneinander ausprobiert und auch beide schonmal weggelassen. Es gibt immer das gleiche Problem

C
132 Beiträge seit 2008
vor 4 Jahren

Moin moin,

dein Problem dürften die ganzen Row und ColumnDefinitionen sein.
Die sind der beschränkende Faktor für die ListBox.

Brauchst du fürs Layout überhaupt so viele Zeilen und Spalten?
Ansonsten vielleicht mal mit nem anderen Container versuchen.

A
Annika234 Themenstarter:in
13 Beiträge seit 2019
vor 4 Jahren

Hallo Chronos,
danke für deine schnelle Antwort.
Die Rows über die die Listbox geht sind zusammen Min 80 hoch, das gesamte Layout Min 130, das Fenster ist ja mindestens 110 hoch. Das sollte nicht das Problem sein.
Die Zeilen uns Spalten brauch ich alle ja. Ich habe immer eine Leerzeile bzw. Spalte zwischen den einzelnen Elementen, finde ich praktischer als Margin.
Inwiefern könnten die RowDefinitionen beschränkend sein für die höhe?
Was meinst du mit anderem Container?

C
132 Beiträge seit 2008
vor 4 Jahren

Naja,
Bei so vielen Angaben für Hight und MinHeight ein dynamisches Layout (Ich gehe mal davon aus dass das am Ende das Ergebnis sein soll) herauszubekommen ist schon eine Herausforderung.
Da setzt man nur mal in einer Zeile die falsche Höhe, da ist man dann erstmal am Suchen.

Mit Container meine ich dein Grid.
Denkbar wäre statt dessen z.B. nen DockPanel bzw. je nach Komplexität des Layouts auch nen Mix.

Also wenn du zwingend die ganzen Zeilen so brauchst, dann entferne mal die Height der vorletzten RowDefinition.

A
Annika234 Themenstarter:in
13 Beiträge seit 2019
vor 4 Jahren

Das mit dem entfernen der Height hat geklappt danke. Geht zum Glück auch problemlos, da sonst nichts in der Zeile steht. Jetzt muss ich es nurnoch hinbekommen, dass die Listbox aufhört zu wachsen wenn die Liste der Elemente zuende ist.
Danke für die Hilfe.

C
132 Beiträge seit 2008
vor 4 Jahren

Wachsen?

Da wächst nichts mehr außerhalb des verbliebenden Platzes.

Mit dem Entfernen der Height setzt du die Höhe auf ihren Default (* |Nutze den verfügbaren Platz) während Auto bedeutet das die Höhe vom Control bestimmt wird.
Bei einem ItemsControl wie der ListBox wäre das die max. Anzahl an Elementen.

A
Annika234 Themenstarter:in
13 Beiträge seit 2019
vor 4 Jahren

Ja, die Box wächst jetzt nichtmehr aus dem Bildschirm raus, das stimmt. Das Problem das ich jetzt habe ist eher ein Luxusproblem. Ich möchte, dass die Box quasi stehen bleibt wenn die Liste der Elemente ganz angezeigt ist und sich dann nichtmehr weiter vergrößert. Dann soll sich nurnoch die unterst Spalte vergrößern.

C
132 Beiträge seit 2008
vor 4 Jahren

Luxusproblem...Na klasse, das auch noch...wie immer... 👅

Dann versuch doch mal deiner Listbox ein VerticalAlignment=Top mitzugeben.

Wenn ich das richtig verstanden habe sollte dies das Luxusproblem lösen.

A
Annika234 Themenstarter:in
13 Beiträge seit 2019
vor 4 Jahren

Ja Super das löst das Problem. Vielen vielen Dank für deine schnelle Hilfe