添加更多我的usercontrol容器或usercontrol集合显示

时间:2011-11-21 15:51:35

标签: c# .net wpf layout user-controls

我不知道我要查找的容器/控件是什么,所以我无法真正搜索它。

添加更多相同的Usercontrol Usercontrol

enter image description here

  • 点击 + 会在现有版权的右侧添加My Usercontrol的新实例
  • 点击 X 会丢弃已点击的用户控件
  • 我并不是真的在寻找一个能够将每个新实例放在新标签上的标签控件,但是如果没有别的,那么它可能会这样做。
  • 设计不是如图所示,图像只是说明了基本的想法

任何关键字/名称建议或现有实施的链接?

e.g。也许有一种风格可以将ListBox变成合适的东西?

3 个答案:

答案 0 :(得分:2)

我会使用ItemsControl并将其ItemsPanelTemplate自定义为您想要的任何内容。

ItemsControls用于迭代对象集合,并以您想要的任何形式显示它们。如果你感兴趣,我写了一些简单的代码示例here,或者这是另一个简单的例子:

<DockPanel x:Name="RootPanel">
    <Button Style="{StaticResource AddButtonStyle}"
            DockPanel.Dock="Right" VerticalAlignment="Center"
            Command="{Binding AddItemCommand" />

    <ScrollViewer>
        <ItemsControl ItemsSource="{Binding MyCollection}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>

            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <local:MyUserControl />

                        <Button Style="{StaticResource RemoveButtonStyle}"
                            Command="{Binding ElementName=RootPanel, Path=DataContext.RemoveItemCommand}"
                            CommandParameter="{Binding }"
                            HorizontalAlignment="Left" VerticalAlignment="Top" />
                    </Grid>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>
</DockPanel>

您的ItemsControl将绑定到ObservableCollection个对象,而您的添加/删除按钮只会添加/删除该集合中的项目。由于它是ObservableCollection,因此当集合发生变化并自动更新时,它将通知UI。

答案 1 :(得分:1)

您确实可以使用ListBox并设置其ItemTemplate和ItemsPanelTemplate:

<ListBox>
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal"></StackPanel>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Label Content="{Binding Name}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

当然,你的ItemTemplate会引用你的控件。

答案 2 :(得分:1)

你可以看一下叫做旋转木马控件的东西,它使用它后面的对象列表,并以类似于itunes的方式显示它们。这可能有点过头但是一个解决方案。可以看到一个例子here

如果这对于您的需求来说太高级了,它是否可以像带有滚动条的堆叠面板一样简单,滚动条绑定到用户控件列表?