如何通过用户的XAML动态地向UserControl添加控件?

我想创建一个包含TextBlock和StackPanel的用户控件,允许用户在XAML中动态地将他/她自己的控件添加到用户控件。

以下是我的UserControl的示例XAML:

        

我希望用户能够将此用户控件嵌入到他们的XAML中,并将他们自己的控件添加到用户控件的堆栈面板中:

  

使用上述XAML执行此操作不起作用。 有任何想法吗?

可以这样做,虽然不像你的例子。 你需要两件事。 第一种是声明UIElement类型的DependencyProperty ,其中所有控件都扩展:

 public static DependencyProperty InnerContentProperty = DependencyProperty.Register("InnerContent", typeof(UIElement), typeof(YourControl)); public UIElement InnerContent { get { return (UIElement)GetValue(InnerContentProperty); } set { SetValue(InnerContentProperty, value); } } 

第二种是在XAML中声明要在其中显示内容的ContentControl

       

在我看来,如果您使用StackPanel ,您可能会发现您的内容无法正确显示…我建议您使用Grid进行布局,除了最简单的布局任务。

现在,您的示例的一个不同之处在于您将如何使用控件。 InnerContent属性的类型为UIElement ,这意味着它可以容纳一个 UIElement 。 这意味着您需要使用容器元素来显示多个项目,但它具有相同的最终结果:

          

结果如下:

在此处输入图像描述


更新>>>

为了记录,我确切地知道你想做什么。 你似乎不明白在说什么,所以我会试着最后一次为你解释。 添加一个Button ,其中设置了Tag属性,如我已经向您展示的那样:

  

现在添加一个Click处理程序:

 private void ButtonClick(object sender, RoutedEventArgs e) { Button button = (Button)sender; if (button.Tag = "MyButton1") DoSomething(); } 

这里的所有都是它的。