Ich habe zwei DataTemplates innerhalb meines XAML definiert, die jeweils für ein separates ItemsControl Panel verwendet werden.Horizontal orientiertes WrapPanel in ItemsControl Listen vertikal
Das Haupt-ItemsControl listet Foo-Objekte auf, die in einem ObservableCollection-Objekt gespeichert sind.
Das Foo-Objekt selbst verfügt über einen eigenen Satz von Elementen, die in einem ObservableCollection-Objekt gespeichert sind.
Ich habe versucht, die XAML in einer Weise zu definieren, die für jede der ObservableCollection Foo Elemente mit seinem Namen in einer Kopfzeile angezeigt werden kann (The First ItemsControl). Daraus sollte die Liste innerhalb jedes Foo-Elements selbst horizontal angezeigt werden (unter Verwendung des zweiten ItemsControl) mit einem verwandten Feld direkt darunter. Wenn genügend Elemente vorhanden sind, sollten sie bei Bedarf zur nächsten Zeile wechseln. Diese
ist, wie die UI derzeit steht:
Dies ist, wie ich die UI wollen tatsächlich erscheinen:
Meine Markup (Button-Steuerelemente sind für einen anderen Aspekt der Benutzeroberfläche):
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
<ItemsControl x:Name="ContentList" ItemTemplate="{StaticResource GameTemplate}" Grid.Column="0" />
</ScrollViewer>
<StackPanel Grid.Column="1" Background="DarkGray">
<Button Click="OnLoad">_Load</Button>
<Button Click="OnSave">_Save</Button>
<Button Click="OnAdd">_Add</Button>
<Button Click="OnDelete">_Delete</Button>
</StackPanel>
</Grid>
Datatemplate für die Auflistung Foo Artikel:
<DataTemplate x:Key="GameTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="30" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Label Content="{Binding Name}" Grid.Row="0" Background="Gray" FontSize="16" />
<ItemsControl x:Name="imageContent"
ItemsSource="{Binding FileList}"
ItemTemplate="{StaticResource GameImagesTemplate}"
Grid.Row="1" />
</Grid>
</DataTemplate>
Datatemplate für Elemente innerhalb jeder Foo Artikel Listing:
<DataTemplate x:Key="GameImagesTemplate">
<WrapPanel Orientation="Horizontal">
<StackPanel Orientation="Vertical" >
<Image Source="{Binding FileInfo.FullName}"
Margin="8,8,8,8"
Height="70"
Width="70" />
<Label Content="{Binding Name}" />
</StackPanel>
</WrapPanel>
</DataTemplate>
Ich bin ziemlich neu in WPF, so habe ich das Gefühl, es ein Problem ist, verursacht durch, wie ich bin Verwenden der Steuerelemente.
Welche WPF-Änderungen müsste ich vornehmen, um die UI zu generieren, die ich möchte?
Es gibt nichts, das mit Ihrem XAML als falsch herausspringt. Können Sie angeben, wie Sie die Daten auffüllen? –
Eine Beispielimplementierung des vertikalen und horizontalen Scrollens für ItemsControl-Artikel wird angezeigt: http://www.technical-recipes.com/2017/how-to-orient-wrappanel-items-within-itcontrol-lists-vertically-and- horizontal/ – AndyUK