ControlTemplate 是我使用最早的Template。昨天居然在小河沟里翻船了。
问题:
我手写了一个ToolTip的Template,结果无论如何也显示不出内容,ToolTip不能用Snoop调,急死我了。
<Image Style="{StaticResource ImageStyle}" Stretch="Fill"
ToolTipService.InitialShowDelay="0"
ToolTipService.ShowDuration="10000"
>
<Image.Resources>
<Style x:Key="tooltip" TargetType="ToolTip">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate >
<Border x:Name="grid1">
<ContentPresenter></ContentPresenter>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Image.Resources>
<Image.ToolTip>
<ToolTip x:Name="nametip" Style="{StaticResource tooltip}" >
<StackPanel>
<TextBlock x:Name="nickname" Text="{Binding Path=Name, Mode=OneWay}" />
</StackPanel>
</ToolTip>
</Image.ToolTip>
</Image>
简单得不能再简单了.可是文字偏偏怎么也显示不出来.
最后发现
模版定义中少了这样的语句.
分析原因:
模版的中定义内容显示的部分是<ContentPresenter/>。它会寻找控件Content的属性,如果不指定ControlTemplate的“TargetType”,他会将控件当做“Control”类型,但是Control没有Content属性,所以内容显示不出来。
结论:
在模版中是ContentPresenter的时候一定要指定ControlTemplate的TargetType属性。
疑惑:
既然ContentPresenter找不到Content属性为什么没有异常呢?