如何克隆整个控件网格?

时间:2009-02-08 04:13:47

标签: wpf grid clone

我有以下代码,基本上我无法弄清楚如何克隆整个网格并将它们并排制作一个空白副本....为了清楚地了解这与医院有关应用程序和网格与怀孕有关所以当说'添加孩子'按钮时,应该在运行时创建一个全新的网格,感谢下面的帮助是一个链接,可能会帮助人们导致我尝试但不知道如何显示它

How can you clone a WPF object?

3 个答案:

答案 0 :(得分:1)

你应该将你想要的对象“克隆”在DataTemplate中并从ItemsControl引用这个模板,然后当你需要另一个网格时,将另一个项目添加到项目控件中(甚至更好地控制绑定到的列表)ItemsControl将创建一个新网格并将其绑定到新对象。

有关示例,请查看我博客上的this post

以下是此应用程序的一个示例(我只留下相关部分而我没有测试它,因此可能存在一些拼写错误):

<Window ... >
   <Window.Resources>
      <DataTemplate x:Key="ChildTemplate">
         <Grid>
            ...
            <TextBlock Text="Delivery Date:" Grid.Column="0" Grid.Row="0"/>
            <TextBox Text="{Binding DeliveryDate}" Grid.Column="1" Grid.Row="0"/>
            <TextBlock Text="Delivery Time:" Grid.Column="0" Grid.Row="1"/>
            <TextBox Text="{Binding DeliveryTime}" Grid.Column="1" Grid.Row="1"/>
            ...
         </Grid>
      </DataTemplate>
   </Window.Resources>
   ...
      <Button Content="AddChild" Click="AddChildClick"/>
   ...
      <ScrollViewer>
          <ItemsControl ItemsSource="{Binding AllChildren}" ItemsTemplate="{StaticResource ChildTemplate}">
              <ItemsControl.PanelTemplate>
                  <ItemsPanelTemplate><StackPanel Orientation="Horizontal"/></ItemPanelTemplate>
              <ItemsControl.PanelTemplate>
      </ScrollViewer>
    ...
</Window>

在cs:

  1. 将所有表单数据设置为Window DataContext。我会打电话给这个班级PostDelveryData
  2. 使用重复数据创建另一个类。我称之为ChildDeliveryData
  3. 将名为ObservableCollection<ChildDeliveryData>的{​​{1}}类型的媒体添加到AllChildren;重要的是它将是PostDeliveryData,而不是任何其他类型的集合。
  4. 现在,为魔术:

    ObservableCollection
  5. 当您将新项目添加到列表中时,将添加整个数据模板的另一个副本。

答案 1 :(得分:0)

我不确定你是否在这里使用正确的方法。我会通过创建一个带有Child属性的“ChildGridControl”来解决问题,并让Child属性处理数据绑定。将新子项添加到GUI将涉及创建ChildGridControl的新实例。

答案 2 :(得分:0)

如果我理解正确,你应该创建一个UserControl,它将你的Grid和后续控件包装在里面。并在您想要复制该UI的任何地方使用此用户控件。