2

(通常適用される汎用テンプレートではなく) のContentControlような固定 XAML レイアウトを持つカスタムがあります。UserControl

以前は、このレイアウトには追加のマークアップがなかったため、文字通り次のようになりました。

<ContentControl x:Class="MyControls.CustomViewControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
</ContentControl>

これはうまくいきました。

コンテンツの周りに境界線を配置したいので、XAML を次のように変更しました。

<ContentControl x:Class="MyControls.CustomViewControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <ContentControl.Template>
        <ControlTemplate>
            <Border BorderThickness="5" BorderBrush="LightGreen">
                <ContentPresenter />
            </Border>
        </ControlTemplate>
    </ContentControl.Template>
</ContentControl>

これは境界線を示していますが、コンテンツはありません。

ContentPresenter に明示的なバインディングを提供してみました:

<ContentPresenter Content="{Binding Path=Content, RelativeSource={RelativeSource Self}}"/>

しかし、これは違いはありませんでした。

明示的な設定Contentは機能します:

<ContentPresenter Content="TEST" />

Content バインディングが機能しない理由を知っている人はいますか? 通常の汎用テンプレートにフォールバックできると思いますが、UserControl のように直接実行できれば簡単です。

4

2 に答える 2

4

TemplateBindingの代わりに使用BindingしますControlTemplate:

<ContentControl.Template>
    <ControlTemplate TargetType="ContentControl">
        <Border BorderThickness="5" BorderBrush="LightGreen">
            <ContentPresenter Content="{TemplateBinding Content}"/>
        </Border>
    </ControlTemplate>
</ContentControl.Template>

編集:

示されているコード スニペットの重要な部分は、TargetTypeの定義にありControlTemplateます。ターゲットタイプで

<ContentControl.Template>
    <ControlTemplate TargetType="ContentControl">
        <Border BorderThickness="5" BorderBrush="LightGreen">
            <ContentPresenter/>
        </Border>
    </ControlTemplate>
</ContentControl.Template>

すでに何もせずに動作しますTemplateBinding

于 2012-10-03T09:57:37.303 に答える