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>

VisualStudioIntellisenseで次のようなエラーが発生します

指定した値をコレクションに割り当てることはできません。次のタイプが予想されました:UIElement

また、アプリを実行すると(ビルドされます)、XAMLのその場所で次の例外が発生します。

'タイプのコレクションに値を追加するとSystem.Windows.Controls.UIElementCollection、例外がスローされました。' 行番号xと行の位置y

UserControlあらゆる種類のコンテンツを受け入れることができるようにするにはどうすればよいですか?

4

2 に答える 2

0

は、コントロールの内部ではなく、コントロールのControlTemplate( )ContentPresenterの一部である必要があります。それがあなたの問題かもしれないと思います。<UserControl.Template>ContentTemplate

于 2012-09-02T18:48:33.017 に答える
0

からUserControlを継承しますContentControl。すでにContentプロパティがinsideContentControlと組み合わされています。ContentPresenterControlTemplate

Microsoft Blendを使用して、ContentControlsビジュアルツリーを取得することもできます。

于 2012-09-03T04:33:54.097 に答える