WPF - 仅当禁用超链接时如何在超链接上显示工具提示

时间:2014-08-20 11:03:22

标签: c# wpf xaml hyperlink tooltip

这是对我的问题from a previous question的更具体描述,并附有后续答案。

我在XAML中定义了标准超链接:

<TextBlock>
    <Hyperlink IsEnabled="{Binding LinkEnabled}">
        <TextBlock Text="{Binding Text}"/>
    </Hyperlink>
</TextBlock>

超链接的IsEnabled属性绑定到视图模型上的属性,其值可以更改。我需要在超链接上放置一个工具提示,只有在超链接被禁用时才会显示。

1 个答案:

答案 0 :(得分:4)

仅在禁用超链接时显示工具提示,the ToolTipService.ShowOnDisabled and ToolTipService.IsEnabled (with the negation converter) properties must be set on the hyperlink:

<TextBlock>
    <Hyperlink IsEnabled="{Binding LinkEnabled}"
               ToolTip="ToolTip"
               ToolTipService.ShowOnDisabled="True"
               ToolTipService.IsEnabled="{Binding IsEnabled, RelativeSource={RelativeSource Self}, Converter={StaticResource negateConverter}}">
        <TextBlock Text="{Binding Text}"/>
    </Hyperlink>
</TextBlock>

但是,工具提示不会显示,因为一旦超链接被禁用it stops being hit-testable,因为它包含在TextBlock中(或者我理解)。

因此,解决方案是改变&#34; IsEnabled&#34;父TextBlock上的属性,而不是超链接上的属性。 但是,这有效:

<TextBlock IsEnabled="False">

但这并不是:

<TextBlock IsEnabled="{Binding LinkEnabled}">

在后一种情况下,changing the TextBlock's IsEnabled property will not change the hyperlink's IsEnabled property。要解决此问题,请the hyperlink's IsEnabled property must be bound to the parent's property

以下是实际解决方案,全部放在一起:

<TextBlock IsEnabled="{Binding LinkEnabled}">
    <Hyperlink IsEnabled="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FrameworkElement}}}"
               ToolTip="ToolTip"
               ToolTipService.ShowOnDisabled="True"
               ToolTipService.IsEnabled="{Binding IsEnabled, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type FrameworkElement}}, Converter={StaticResource negateConverter}}">
        <TextBlock Text="{Binding Text}"/>
    </Hyperlink>
</TextBlock>