我在我的 XAML 中定义了两个 DataTemplate,每个都用于单独的 ItemsControl 面板。
主 ItemsControl 列出了存储在 ObservableCollection 对象中的 Foo 对象。
Foo 对象本身有自己的一组项目,作为 ObservableCollection 对象存储在其中。
我试图以一种允许每个 ObservableCollection Foo 项目在标题中显示其名称的方式定义 XAML(第一个 ItemsControl)。由此,每个 Foo 项目本身内的列表应水平显示(使用第二个 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>
DataTemplate 用于列出每个 Foo 项目中的项目:
<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 更改?