WPF Stretch ListBox Hauteur 100% de Grid.Row?
Je suis d'essayer d'étirer la hauteur d'un ListBox
100% de la hauteur de la mère de la grille (c'est à dire 90% de la hauteur de la vue parent); même si la listboxes
sont vides. Il est à noter que VerticalAlignment="Stretch"
ne semble pas fonctionner, j'ai donc supprimé de la ListBox
et StackPanel
éléments. Dès maintenant, les ListBox
seulement s'étend aussi loin que nécessaire afin d'accueillir le nombre d'éléments qu'elle contient. Je comprends que la ligne définitions devrait fonctionner, mais si les deux listes sont vides, ils ont tous les deux, se réduisent à quelques pixels de haut (avec les lignes de la grille). Quelque chose à l'origine de ces lignes pour réduire en dépit de manière explicite de la hauteur de la déclaration?
<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>
source d'informationauteur alan
Vous devez vous connecter pour publier un commentaire.
J'ai été en mesure d'atteindre la hauteur désirée par la liaison de la
ListBox
propriété height de laActualHeight
de la LayoutRootGrid
via le code XAML ci-dessous:L'important étant:
Également réalisable par type d'ancêtre:
La stackpanels faire compresser. L'enlever et il va remplir toute la hauteur
Le code que vous avez posté est exactement ce que les parents de la grille de hauteur de ligne de définition a déclaré: jusqu'à 90% de la hauteur disponible.
*.1 = 10% de la hauteur
*.9 = 90% de la hauteur
Souvent utile de supprimer l'encombrement de la xaml et de commencer avec quelque chose de simple pour aider à la mise en page. Voici un exemple avec votre code de la Grille de colonne/ligne de la définition, mais avec moins d'encombrement et de quelque couleur d'arrière-plan pour afficher la zone de liste entière.
Noter que la première zone de liste ne pas déclarer une Colonne ou une Ligne d'index; lorsqu'aucun indice est utilisé, il est supposé être égal à 0, c'est à dire,
Grid.Row="0" Grid.Column=0
.