J'utilise le GridHelper de Rachel Lim pour obtenir le nombre dynamique de lignes. Ce que je voulais réaliser, c'est que chaque ligne soit affichée en dessous d'une autre (finie), pour pouvoir les redimensionner (en utilisant GridSplitter) et que le contenu soit redimensionné proportionnellement à la taille de l'écran.ItemsControl - Redimensionnement automatique des éléments enfants
Résultat:
Xaml:
<Grid>
<ItemsControl ItemsSource="{Binding RowSource}" >
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid local:GridHelper.RowCount="{Binding RowCount}" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Grid.Row" Value="{Binding RowNumber}"/>
</Style>
</ItemsControl.ItemContainerStyle>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<DataGrid>
<DataGrid.Columns>
<DataGridTextColumn Header="Col 1" />
<DataGridTextColumn Header="Col 2" />
<DataGridTextColumn Header="Col 3" />
</DataGrid.Columns>
</DataGrid>
<Button Grid.Column="1" Content="Btn" />
</Grid>
<GridSplitter Height="5" VerticalAlignment="Bottom" HorizontalAlignment="Stretch" Grid.Row="0" ResizeDirection="Rows" ResizeBehavior="CurrentAndNext"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
ViewModel:
internal class MyViewModel
{
public ObservableCollection<RowInfo> RowSource { get; set; }
public int RowCount { get { return RowSource.Count; } }
public MyViewModel()
{
RowSource = new ObservableCollection<RowInfo>()
{
new RowInfo() { RowNumber = 0 },
new RowInfo() { RowNumber = 1 },
new RowInfo() { RowNumber = 2 }
};
}
}
rowInfo:
public class RowInfo
{
public int RowNumber { get; internal set; }
}
Je ne suis pas sûr que je reçois bien la question, ce que vous voulez est que les lignes par défaut devraient avoir une certaine hauteur même si n'y a pas de contenu en eux. Est-ce que c'est le besoin? –
Oui, je souhaite que les lignes soient redimensionnées proportionnellement à la taille de la fenêtre. @ mm8 a obtenu cette partie à droite mais le redimensionnement (avec GridSplitter) s'est arrêté pour fonctionner correctement. –
Oh, donc, fondamentalement, vous voulez que le contenu soit réparti dans toute la vue et quand je redimensionne la fenêtre, vous voulez aussi mettre à l'échelle les lignes et les colonnes? –