如何创建具有名称内容的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