在我的自定义控件中,我想根据选项以编程方式启用或禁用工具提示。以下是我在模板中定义图标的方式:
<Image x:Name="PART_IconImage" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Center" Source="{TemplateBinding Icon}"
ToolTipService.ToolTip="{TemplateBinding Caption}" />
我正在使用此代码访问工具提示并启用/禁用它:
// Enable tooltip when caption not shown
if (this.IconImage != null)
{
var toolTip = ToolTipService.GetToolTip(this.IconImage) as ToolTip;
if (toolTip != null)
toolTip.IsEnabled = this.CaptionVisibility.HasValue
? (this.CaptionVisibility.Value == Visibility.Collapsed)
: (this.ParentToolbar.CaptionsVisibility == Visibility.Collapsed);
}
GetToolTip返回null。知道为什么吗?
P.S。我在这里遵循这个建议:How to programmatically access ToolTipService of a Silverlight FrameworkElement? 但它对我不起作用。
答案 0 :(得分:2)
您确定ToolTipService.GetToolTip
返回null,而不是返回ToolTip
以外的其他内容吗?
我使用与您类似的代码进行了快速实验,发现ToolTipService.GetToolTip
返回了一个字符串。我当然将ToolTipService.ToolTip
绑定到字符串依赖项属性。我怀疑你也从GetToolTip
获得了一个字符串,但是在调用此方法后添加的as ToolTip
将该字符串空出来。
以编程方式禁用工具提示的一种方法是将其绑定到视图模型上的属性,如果应显示工具提示,则该属性包含工具提示文本;如果不显示工具提示,则为null。
或者,您可以使用ToolTip
而不是字符串作为控件的工具提示。这样您就可以访问ToolTip
对象并在上面的代码中启用/禁用它:
<Image x:Name="PART_IconImage" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Center" Source="{TemplateBinding Icon}">
<ToolTipService.ToolTip>
<ToolTip>
<TextBlock Text="{TemplateBinding Caption}" />
</ToolTip>
</ToolTipService.ToolTip>
</Image>
答案 1 :(得分:1)
为什么不简单地将下面的属性绑定到bool属性?
ToolTipService.IsEnabled
然后,只要您想要禁用/启用,只需更改绑定属性
&LT; Image ToolTipService.IsEnabled="{Binding Path=SomeProperty}">