我有一个自定义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一样直接做它会更容易。
答案 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>