如何实现模板控件以在wpf中动态添加控件?

时间:2013-12-25 05:54:33

标签: c# wpf binding controltemplate

我有一些像图片一样控制的页面。我想动态添加这些控件,当用户点击添加动态添加控件时。我怎么能实现这个?我想使用模板控件或类似的东西。

enter image description here

2 个答案:

答案 0 :(得分:1)

为什么不采用“样本标签,波斯语翻译标签,文本框和添加语音按钮”并将它们放入用户控件中(让我们将其命名为 MyUserControl

然后,不是直接在窗口的网格上添加该用户控件,而是添加一个堆栈面板(让我们将其命名为 MyStackPanel ),并将该用户控件添加到堆栈面板(堆栈面板必须将方向设置为垂直)


现在,当用户点击“加号”按钮时,您的代码将是:

MyStackPanel.Children.Add(new MyUserControl() { Margin = new Thickness(0, 5, 0, 0) });

这将为您提供您要求的相同控件,保证金最高= 5。


您只需为用户控件编写一次代码,所有添加的控件(单击加号按钮后)将具有相同的代码。

修改 如果要在单击删除按钮时删除MyUserControl,请在主窗口上为StackPanel(MyStackPanel)添加以下代码(查找ButtonBase.Click):

<StackPanel Height="236" HorizontalAlignment="Left" ButtonBase.Click="stackPanel1_Click" Name="stackPanel1" VerticalAlignment="Top" Width="491">

以及StackPanel的事件:

 private void stackPanel1_Click(object sender, RoutedEventArgs e)
    {
        if (((UserControl1)e.Source).Tag.ToString() == "1")
        {
            stackPanel1.Children.Remove(((UserControl1)e.Source));
        }
        else
        {
            MessageBox.Show("Another button was clicked");
        }

    }

现在,用户控件上的删除按钮必须具有以下代码行:

 this.Tag = 1;

答案 1 :(得分:0)

根据我使用Implicit Data Templates比其他任何事情都容易User Control也是一个不错的选择,但Data TemplatesImplicit Data Templates要好得多。

看看Data Templates