我正在尝试创建一个文本块,该文本块在剪切时显示文本块文本的工具提示。我有一个转换器中的实际可见性部分。我的问题是将ToolTip的内容绑定到其partent文本块的文本。我一直在摆弄不同的相对路径一段时间,除了一个空白的工具提示之外永远不会得到任何东西。如果我在工具提示内容中对某些内容进行硬编码,那么当我想要的时候,文本显示正常。
<Style x:Key="InfoToolTipBaseTextBlockStyle" TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockBase}">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip Visibility="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget, Converter={StaticResource TrimmedVisibilityConverter}}" Content="{Binding Path=Text, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type TextBlock}}}"/>
</Setter.Value>
</Setter>
</Style>
答案 0 :(得分:2)
不是创建始终存在的工具提示,设置其内容,然后切换其可见性,而是在TextBlock上设置样式触发器,在需要时将ToolTip属性设置为Text。
我已经使用了您现有的转换器,但您可能需要重写它以返回bool
。然后,Value="True"
中有DataTrigger
。
<Style
x:Key="InfoToolTipBaseTextBlockStyle"
TargetType="{x:Type TextBlock}"
BasedOn="{StaticResource TextBlockBase}"
>
<Style.Triggers>
<DataTrigger
Binding="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource TrimmedVisibilityConverter}}"
Value="Visible"
>
<Setter Property="ToolTip" Value="{Binding Text, RelativeSource={RelativeSource Self}}" />
</DataTrigger>
</Style.Triggers>
</Style>
我不知道这对你是否有问题,但如果Text
在运行时发生变化,工具提示将不会更新,因为Binding不知道你关心{{1属性。修复此问题的方法是将转换器重写为Text
,以便将其与可绑定到IMultiValueConverter
以及Text
的MultiBinding一起使用。它不必使用 Self
,但会在Text
更改时更新目标。
更好的解决方案,更简单和WPFish,将为Text
编写一个行为,回收转换器的内容,处理文本上的更改通知,并更新附加的TextBlock
bool属性TextBlock的。
答案 1 :(得分:2)
简单地解决了这个问题。
<Style x:Key="InfoToolTipBaseTextBlockStyle" TargetType="{x:Type TextBlock}" BasedOn="{StaticResource TextBlockBase}">
<Setter Property="ToolTip">
<Setter.Value>
<ToolTip Visibility="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget, Converter={StaticResource TrimmedVisibilityConverter}}"
Content="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget.Text}"/>
</Setter.Value>
</Setter>
</Style>