1

我正在尝试编写一个UserControl允许其中的单个控件(如Label)以及“布局”控件StackPanel和朋友的“布局”控件。

我很难做到这一点。我的代码适用于单个控件,但不适用于布局控件。我觉得这是一个明显的修复,我是 WPF 的新手。这是UserControlXAML:

<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能够接受任何类型的内容?

4

2 回答 2

0

继承您的 UserControl 从ContentControl. ContentControl已经有 Content 属性与ContentPresenterinside相结合ControlTemplate

您还可以使用 microsoft blend 来获取 ContentControls 可视化树。

于 2012-09-03T04:33:54.097 回答
0

ContentPresenter应该是控件的ControlTemplate ( )的一部分<UserControl.Template>,而不是在ContentTemplate. 我认为这可能是你的问题。

于 2012-09-02T18:48:33.017 回答