如何仅在禁用超链接时在超链接上显示工具提示
本文关键字:超链接 工具提示 显示 何仅 | 更新日期: 2023-09-27 18:18:45
这是对我上一个问题的更具体的描述,并附有后续的回答。
在XAML中定义了一个标准超链接:
<TextBlock>
<Hyperlink IsEnabled="{Binding LinkEnabled}">
<TextBlock Text="{Binding Text}"/>
</Hyperlink>
</TextBlock>
超链接的IsEnabled属性绑定到视图模型上的一个属性,该属性的值可以更改。我需要在超链接上放置一个工具提示,它只会在超链接被禁用时显示。
若要仅在禁用超链接时显示工具提示,则使用ToolTipService。ShowOnDisabled和ToolTipService。必须在超链接上设置IsEnabled(带有否定转换器)属性:
<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>
然而,工具提示不会显示,因为一旦超链接被禁用,它就不再是可测试的,因为它包含在TextBlock中(或我的理解)。
因此,解决方案是改变父TextBlock上的"IsEnabled"属性,而不是在超链接上。但是,这是可行的:<TextBlock IsEnabled="False">
但这不是:
<TextBlock IsEnabled="{Binding LinkEnabled}">
在后一种情况下,改变TextBlock的IsEnabled属性不会改变超链接的IsEnabled属性。要解决这个问题,必须将超链接的IsEnabled属性绑定到父属性。
下面是实际的解决方案,全部放在一起:
<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>