ContentControl不显示内容

时间:2012-10-03 09:48:20

标签: c# wpf xaml binding contentcontrol

我有一个自定义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" />

任何人都知道为什么内容绑定不起作用?我想我可以回到通常的通用模板,但如果我可以像UserControl一样直接做它会更容易。

2 个答案:

答案 0 :(得分:6)

为控制模板添加TargetType

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

答案 1 :(得分:2)

TemplateBinding

中使用Binding代替ControlTemplate
<ContentControl.Template>
    <ControlTemplate>
        <Border BorderThickness="5" BorderBrush="LightGreen">
            <ContentPresenter Content="{TemplateBinding Content}"/>
        </Border>
    </ControlTemplate>
</ContentControl.Template>