C# 让布局控件出现在用户控件中
我正在尝试编写一个C# 让布局控件出现在用户控件中,c#,wpf,layout,user-controls,C#,Wpf,Layout,User Controls,我正在尝试编写一个UserControl,它既允许单个控件(如Label)也允许“布局”控件(如StackPanel和friends) 我做那件事有困难。我的代码适用于单个控件,但不适用于布局控件。我有一种感觉,这是一个明显的修复,我是新的WPF。以下是UserControlXAML: <UserControl <!-- namespaces omitted for brevity -->> <UserControl.ContentTemplate>
UserControl
,它既允许单个控件(如Label
)也允许“布局”控件(如StackPanel
和friends)
我做那件事有困难。我的代码适用于单个控件,但不适用于布局控件。我有一种感觉,这是一个明显的修复,我是新的WPF。以下是UserControl
XAML:
<UserControl <!-- namespaces omitted for brevity -->>
<UserControl.ContentTemplate>
<DataTemplate>
<ContentPresenter Content="{TemplateBinding Content}" />
</DataTemplate>
</UserControl.ContentTemplate>
</UserControl>
当我尝试这样使用它时:
<my:SpecialUserControl>
hello
</my:SpecialUserControl>
你好
很好。但是当我试着做一些像
<my:SpecialUserControl>
<StackPanel>
<!-- stuff -->
</StackPanel>
</my:SpecialUserControl>
Visual Studio Intellisense中有一个错误
无法将指定的值分配给集合。应为以下类型:UIElement
当我运行应用程序(它构建)时,我在XAML中的那个位置得到了这个异常:
“向类型为System.Windows.Controls.UIElementCollection
的集合添加值时引发异常。”行号x
和行位置y
如何使我的
UserControl
能够接受任何类型的内容?ContentPresenter应该是控件的ControlTemplate(
)的一部分,而不是在ContentTemplate
中。我认为这可能是您的问题。从ContentControl
继承您的用户控件ContentControl
已在ControlTemplate
中具有与ContentPresenter
组合的内容属性
您还可以使用microsoft blend获取ContentControls可视化树。如果这样做,则在
模板绑定内容中会出现一个错误,该错误表示“名称内容
无法识别或无法访问。”如果我将TemplateBinding
更改为Binding
则不会出现错误,但UserControl
不会显示任何内容。