将项目动态添加到网格 WPF
Dynamically add items to grid WPF
我有以下“网格”:
<Grid x:Name="ImagesGrid" Grid.Row="1" >
<ItemsControl ItemsSource="{Binding FrameViewers}" />
</Grid>
我还有以下 collection 项,共 UserControl
项:
private ObservableCollection<FrameViewer> m_frameViewers = new ObservableCollection<FrameViewer>();
public ObservableCollection<FrameViewer> FrameViewers
{
get => m_frameViewers;
set
{
m_frameViewers = value;
OnPropertyChanged();
}
}
我想将 FrameViewer
动态添加到我的屏幕,使其看起来像附件中的图片:
目前我看到它们是这样垂直排序的:
我可以玩 'Grid' 并向 ItemSource
添加了一个 StackPanel
,但随后它们的大小都由标题的长度决定,并附加到Grid
的左侧
我在这里错过了什么?
我错过了什么?
默认情况下,ItemsControl 将垂直排列项目。
对于水平布局,您需要将其 ItemsPanel
更改为不同的 ItemsPanelTemplate
- 使用水平 StackPanel 或 UniformGrid 之类的东西,具体取决于您希望什么时候发生集合中有超过三个 FrameViewer 项。
有关示例,请参阅 here。
然后您需要将 ItemsControl ItemTemplate
设置为适当的 DataTemplate
,以确保每个 FrameViewer 项目都以所需的大小显示。
我有以下“网格”:
<Grid x:Name="ImagesGrid" Grid.Row="1" >
<ItemsControl ItemsSource="{Binding FrameViewers}" />
</Grid>
我还有以下 collection 项,共 UserControl
项:
private ObservableCollection<FrameViewer> m_frameViewers = new ObservableCollection<FrameViewer>();
public ObservableCollection<FrameViewer> FrameViewers
{
get => m_frameViewers;
set
{
m_frameViewers = value;
OnPropertyChanged();
}
}
我想将 FrameViewer
动态添加到我的屏幕,使其看起来像附件中的图片:
目前我看到它们是这样垂直排序的:
我可以玩 'Grid' 并向 ItemSource
添加了一个 StackPanel
,但随后它们的大小都由标题的长度决定,并附加到Grid
我在这里错过了什么? 我错过了什么?
默认情况下,ItemsControl 将垂直排列项目。
对于水平布局,您需要将其 ItemsPanel
更改为不同的 ItemsPanelTemplate
- 使用水平 StackPanel 或 UniformGrid 之类的东西,具体取决于您希望什么时候发生集合中有超过三个 FrameViewer 项。
有关示例,请参阅 here。
然后您需要将 ItemsControl ItemTemplate
设置为适当的 DataTemplate
,以确保每个 FrameViewer 项目都以所需的大小显示。