我找不到如何轻松地创建一个自定义控件,我可以在其中插入xaml的内容。例如,我希望控件包含一个网格,我以某种方式设置了该网格的样式,然后从组件外部向其中插入内容。
<local:MyComponent>
... some xaml content
</local:MyComponent>
我的想法是,有某种占位符告诉在哪里放置的内容。但它可能会有所不同。
<UserControl>
<Grid>
<ContentPlaceholder />
</Grid>
</UserControl>
3条答案
按热度按时间yvgpqqbh1#
现在有这样的控制。它被称为
ContentControl
。它有一个Content
属性,可以设置为任何XAML内容。然后,您可以使用Template
属性来定义ControlTemplate
及其周围的Grid
,例如:为了能够重用
ContentTemplate
,可以将其作为资源存储在资源字典中。例如App.xaml
:用法:
您还可以将
Content
属性设置为任何对象,并使用ContentTemplate
属性定义此对象的外观。ddrv8njm2#
让我给你们看两个例子:
实施例A
创建一个自定义控件并为您的内容添加一个
DependencyProperty
。您还需要添加ContentProperty
属性,以便可以在XAML中设置内容。CustomControl.cs
Generic.xaml
实施例B
创建从
ContentControl
继承的自定义控件。CustomContentControl.cs
Generic.xaml
更新
如果你不想让
Style
在 * Generic.xaml * 中,你可以创建一个ResourceDictionary
文件:CustomContentControl.xaml
并在 Generic.xaml 或 App.xaml 中添加
ResourceDictionary
:x3naxklr3#
谢谢大家提供的解决方案。他们都帮助我找到了我需要的解决方案。
我最终创建了一个单独的内容组件,如下所示:
1.我在Visula Studio中添加了一个新的UserControl(创建了MyContentControl.xaml文件+ MyContentControl.xaml.cs)
1.在文件MyContentControl.xaml.cs中,我将继承从UserControl更改为ContentControl。3.在MyContentControl.xaml文件中,我将UserControl标记更改为ContentControl,并添加ContentControl.Template标记。
MyContentControl.xaml.cs
MyContentControl.xaml
使用组件