这是对我的问题from a previous question的更具体描述,并附有后续答案。
我在XAML中定义了标准超链接:
<TextBlock>
<Hyperlink IsEnabled="{Binding LinkEnabled}">
<TextBlock Text="{Binding Text}"/>
</Hyperlink>
</TextBlock>
超链接的IsEnabled属性绑定到视图模型上的属性,其值可以更改。我需要在超链接上放置一个工具提示,只有在超链接被禁用时才会显示。
答案 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>