对于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?
答案 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是一个让你入门的链接。