使用ItemsControl创建多个项目

时间:2016-06-06 15:38:07

标签: wpf wpf-controls

对于WPF我是一个新手所以我甚至不知道我想做什么是可能的。我一直在阅读有关ItemsControl的内容,以创建项目的大量实例。我见过的所有例子,只允许你为一个"类型"创建X个项目。如下例所示:

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

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

我希望能够在任何时候单击按钮时使用ItemsControl创建各种类型的项目,如TextBox,Button和ComboBox。所以当我点击samp_Btn1时,我想要一个新的TextBox和按钮出现在我已经显示的那个下面。

我试过了:

 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?

1 个答案:

答案 0 :(得分:0)

正如@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内容。你会得到:

  

属性“内容”只能设置两次。

这些控件并非旨在容纳collection of children

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

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

为此,here是一个让你入门的链接。

相关问题