XAML 内に定義された 2 つの DataTemplates があり、それぞれが個別の ItemsControl パネルに使用されます。
メインの ItemsControl は、ObservableCollection オブジェクト内に格納された Foo オブジェクトを一覧表示します。
Foo オブジェクト自体には、ObservableCollection オブジェクトとして格納された独自の項目セットがあります。
ObservableCollection Foo アイテムのそれぞれをヘッダーにその名前で表示できるように XAML を定義しようとしました (最初の ItemsControl)。これから、各 Foo アイテム内のリスト自体が水平に (2 番目の ItemsControl を使用して) 表示され、そのすぐ下に関連するフィールドが表示されます。十分な項目が存在する場合は、必要に応じて次の行に折り返す必要があります。
現在の UI は次のとおりです。
これは、UIが実際に表示される方法です。
私のマークアップ (ボタン コントロールは、UI の別の側面のためのものです) :
<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>
Foo アイテムを一覧表示するための DataTemplate:
<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>
各 Foo アイテム内のアイテムをリストするための DataTemplate:
<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>
私はWPFにかなり慣れていないので、コントロールの使用方法に起因する問題だと感じています。
希望する UI を生成するには、WPF にどのような変更を加える必要がありますか?