如何创建具有名称内容的WPF用户控件

我有一组带有附加命令和逻辑的控件,它们以相同的方式不断重复使用。我决定创建一个包含所有通用控件和逻辑的用户控件。

但是,我还需要控件能够容纳可以命名的内容。我尝试了以下方法:

<UserControl.ContentTemplate>

<DataTemplate>

<Button>a reused button</Button>

<ContentPresenter Content="{TemplateBinding Content}"/>

<Button>a reused button</Button>

</DataTemplate>

</UserControl.ContentTemplate>

但是,似乎无法放置在用户控件内的任何内容。例如,如果我以以下方式使用控件:

<lib:UserControl1>

<Button Name="buttonName">content</Button>

</lib:UserControl1>

我收到以下错误:

无法在元素“按钮”上设置“名称”属性值“ buttonName”。“按钮”在元素“

UserControl1”的范围之内,该元素在另一个范围中定义时已经注册了名称。

如果删除buttonName,它将进行编译,但是我需要能够命名内容。我该如何实现?

回答:

当使用XAML时,这似乎是不可能的。当我实际拥有所需的所有控件时,自定义控件似乎是一个过大的杀伤力,但只需要将它们与少量逻辑组合在一起并允许命名的内容即可。

Mackenir认为,京东博客上的解决方案似乎是最好的折衷方案。扩展JD解决方案以允许仍在XAML中定义控件的方法如下:

    protected override void OnInitialized(EventArgs e)

{

base.OnInitialized(e);

var grid = new Grid();

var content = new ContentPresenter

{

Content = Content

};

var userControl = new UserControlDefinedInXAML();

userControl.aStackPanel.Children.Add(content);

grid.Children.Add(userControl);

Content = grid;

}

在上面的示例中,我创建了一个名为UserControlDefinedInXAML的用户控件,该控件的定义类似于使用XAML的任何普通用户控件。在我的UserControlDefinedInXAML中,我有一个名为aStackPanel的StackPanel,我希望在其中显示我的命名内容。

以上是 如何创建具有名称内容的WPF用户控件 的全部内容, 来源链接: utcz.com/qa/404820.html

回到顶部