WPF-Stretch ListBox Höhe von 100% der Raster.Zeile?
Versuche ich zu dehnen, die Höhe eines ListBox
100% der Höhe des übergeordneten Netz (dh 90% der Höhe des übergeordneten Ansicht); auch wenn die listboxes
leer sind. Ich sollte anmerken, dass VerticalAlignment="Stretch"
scheint nicht zu funktionieren, also habe ich es entfernt von der ListBox
und StackPanel
Elemente. Wie jetzt, die ListBox
erstreckt sich nur so weit, wie es erforderlich ist, um die Anzahl der Elemente, die es enthält. Ich verstehe, dass die Zeile-Definitionen sollte funktionieren, aber wenn beide Listen leer sind, beide verkleinert, um ein paar Pixel hoch (zusammen mit der grid-Zeilen). Könnte etwas verursachen, diese Zeilen zu schrumpfen, trotz der expliziten Höhe Erklärung?
<Grid.ColumnDefinitions>
<ColumnDefinition Width=".24*"/>
<ColumnDefinition Width=".73*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height=".9*"/>
<RowDefinition Height=".1*"/>
</Grid.RowDefinitions>
<ListBox Grid.Column="0" Grid.Row="0" Name="Subdivisions" SelectedItem="{Binding SelectedSubdivisionViewModel}" ItemsSource="{Binding Path=Subdivisions}" Grid.IsSharedSizeScope="True">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<Border BorderBrush="#FF4788c8" BorderThickness="1,1,1,1" CornerRadius="8,8,8,8">
<Expander IsExpanded="{Binding IsSelected, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}">
<Expander.Header>
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" SharedSizeGroup="col1" />
<ColumnDefinition Width=".1*" SharedSizeGroup="col2" />
<ColumnDefinition Width="*" SharedSizeGroup="col3" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Grid.Column="0" Grid.Row="0">
<TextBlock.Text>
<MultiBinding StringFormat="Name: {0}">
<Binding Path="SubdivisionName" />
<Binding Path="SubdivisionID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock Grid.Column="2" Grid.Row="0">
<TextBlock.Text>
<MultiBinding StringFormat="ID: {0}">
<Binding Path="SubdivisionName" />
<Binding Path="SubdivisionID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
<TextBlock Grid.Column="2" Grid.Row="1">
<TextBlock.Text>
<MultiBinding StringFormat="ID: {0}">
<Binding Path="SubdivisionName" />
<Binding Path="SubdivisionID" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</Grid>
</StackPanel>
</Expander.Header>
<StackPanel>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="{Binding ElementName=SubdivisionID}" />
<TextBlock Text="{Binding Path=SubdivisionID}" />
</Grid>
</StackPanel>
</Expander>
</Border>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Es scheint, die erste Zeile ist nicht zu Ehren der 90% - Höhe definition.
In meinem Fall war es ein Stil für die
GroupBox
in einer Ressource-Wörterbuch verwiesen wird, die von App.xaml
. Die VerticalAlignment
war Top
. Ich setze die Eigenschaft, lokal zu Stretch
. Dies beantwortet nicht die Frage, aber kann helfen, jemand mit einem ähnlichen problem.InformationsquelleAutor alan | 2011-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich in der Lage, das erreichen der gewünschten Höhe durch die Bindung
ListBox
height-Eigenschaft, um dieActualHeight
des LayoutRootGrid
über die XAML-unten:Wichtige bit:
Auch erreichbar über Vorfahren geben:
ListBox
auf die gleiche wie die Zeile, den Namen der Reihe etwas. Dann, in derBinding
ändernElementName
auf Ihren Namen.InformationsquelleAutor alan
Des stackpanels machen es zu komprimieren. Entfernen Sie es und es füllen werde die volle Höhe
InformationsquelleAutor Tjeerd Mulder
Den code, den Sie gepostet habe macht genau das, was die übergeordneten grid-Zeilen-Höhe-definition deklariert hat: nehmen Sie bis zu 90% der verfügbaren Höhe.
*.1 = 10% der Höhe
*.9 = 90% der Höhe
Oft nützlich sein, um die zu entfernen Krempel aus dem xaml und starten Sie mit etwas einfachem zu helfen mit dem layout. Hier ist ein Beispiel mit code-Raster für Spalten/Zeilen-definition ist, aber mit weniger Kabelsalat und einige hintergrund-Farbe zu zeigen, die gesamte ListBox.
Beachten Sie, dass das erste Listenfeld nicht erklären, eine Spalte oder eine Zeile, die index, wenn kein index verwendet wird, wird angenommen, dass 0, d.h.,
Grid.Row="0" Grid.Column=0
.überhaupt nicht. Nehmen Sie die erste ListBox aus und die 2. ListBox wird sich noch füllen den gesamten vertikalen Raum. Nicht sicher, warum dies so ist, wird ab-gestimmt.
nehmen Sie mein Beispiel, führen Sie es. Beide Listboxen zu erweitern, um die gesamte Höhe. Dann nehmen Sie die erste ListBox aus der XAML (die eine gebunden an die Schriften), führen Sie das Beispiel und die 2. ListBox immer noch füllt die gesamte Höhe.
funktioniert bei mir mit einer leeren DataGrid.
InformationsquelleAutor Metro Smurf