使用 ItemsControl 创建多个项目

Create Multiple Items Using ItemsControl

我是 WPF 的新手,所以我什至不知道我想做的事情是否可行。我一直在阅读 ItemsControl 来创建一个项目的多个实例。我见过的所有示例,只允许您为一个 "type" 创建 X 个项目,如下例所示:

ItemsControl ItemsSource="{Binding MyCollection}">
    <ItemsControl.ItemTemplate>
       <DataTemplate>
           <Button Content="{Binding }" />
       </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

它为 ItemSource 中的每个项目创建一个按钮。

我希望能够在每次单击按钮时使用 ItemsControl 创建各种类型的项目,例如 TextBox、Button 和 ComboBox。因此,当我单击 samp_Btn1 时,我想要一个新的文本框和按钮出现在我已经显示的文本框和按钮下方。

我试过了:

 ItemsControl>
    <ItemsControl.ItemTemplate>
       <DataTemplate>
           <Button Name="test_Btn"
              Width="50"
              Height="50"/>
           <TextBox Name="test_TextBox" Width="50" Height="50" />
       </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

然后是刚刚创建新 ItemControl 的函数

        private void createNewItem()
    {
        ItemsControl test = new ItemsControl();
    }

但我不断收到一条错误消息,提示 PropertyVisual Tree 设置了不止一次。这是处理事情的正确方法还是我需要分别为 TextBox 和 Button 创建一个 ItemControl?

正如@NSGaga 和@Clemens 所指出的,您应该将您的控件包装在一个容器中——例如一个网格。

<ItemsControl>
<ItemsControl.ItemTemplate>
   <DataTemplate>
       <Grid>
           <Button Name="test_Btn" Width="50" Height="50"/>
           <TextBox Name="test_TextBox" Width="50" Height="50" />
       </Grid>
   </DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

请记住,它不仅仅指 ItemsControl。尝试把,例如。两个网格直接作为一个MainWindow Content。您将获得:

The property "Content" can only be set twice.

这些控件并非设计用于容纳 collection of children

元素需要有某种参考系。这就是你使用网格的目的 - 你通过给它们相对于网格的位置来物理定位它们。

此外,如果您尝试在 ItemsControl 中创建具有额外功能的某种精心设计,您可以考虑查看 UserControl

为此,here 是 link 的入门指南。