如何通过用户的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(); }
这里的所有都是它的。