如果绑定为null,则隐藏工具提示

The*_*der 33 c# silverlight xaml binding tooltip

目前我有以下代码来显示工具提示.

<Border BorderBrush="Black"
        BorderThickness="{Binding Border}"
        Height="23"
        Background="{Binding Color}">
<ToolTipService.ToolTip>
    <TextBlock Text="{Binding TooltipInformation}" />
</ToolTipService.ToolTip>
Run Code Online (Sandbox Code Playgroud)

这在ItemsControl中显示,包含大约25个项目.其中只有少数的值设置为TooltipInformation

如果TooltipInforation是一个空字符串,它仍然显示包含文本块的工具提示框作为一个非常小的窗口(大约5px高和20px宽).即使我将文本块可见性设置为折叠.

如果TooltipInformation的值为null或空字符串,有没有办法完全删除工具提示?

小智 99

隐藏所有控件的空工具提示的一种方法是在App.xaml中包含的资源字典中创建样式.当工具提示为空字符串或null时,此样式设置折叠的可见性:

<!-- Style to hide tool tips that have an empty content. -->
<Style TargetType="ToolTip">
    <Style.Triggers>
        <Trigger Property="Content"
                 Value="{x:Static sys:String.Empty}">
            <Setter Property="Visibility"
                    Value="Collapsed" />
        </Trigger>
        <Trigger Property="Content"
                 Value="{x:Null}">
            <Setter Property="Visibility"
                    Value="Collapsed" />
        </Trigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

还包括sys命名空间(对于String.Empty):

xmlns:sys="clr-namespace:System;assembly=mscorlib"
Run Code Online (Sandbox Code Playgroud)

  • Silverlight没有触发器. (10认同)
  • 如果`Content`是一个UI元素,例如`TextBlock`,则不起作用. (5认同)
  • 这是最好的答案. (3认同)
  • 添加`BasedOn ="{StaticResource {x:Type ToolTip}}`以避免破坏现有样式(例如来自主题) (3认同)
  • 完善。如果可以的话,我会给您超过+1的余地 (2认同)

Jus*_* XL 16

你能做到这一点的方法之一是包裹ToolTip在一个Rectangle并给它一个Transparent颜色.然后你只需设置VisibilityCollapsed这个Rectangle.

更新:

<Border Background="#FFE45F5F">
    <Grid>
        <TextBlock Text="{Binding Property1}"/>
        <Rectangle Fill="Transparent" Visibility="{Binding Property2, Converter={StaticResource BooleanToVisibilityConverter}}" ToolTipService.ToolTip="{Binding TooltipInformation}"/>
    </Grid>
</Border>
Run Code Online (Sandbox Code Playgroud)


Fre*_*ers 10

这是一个 WPF 答案(尚未在 Silverlight 中尝试过)。

使用 ToolTipService.IsEnabled,并将其绑定到工具提示属性。然后使用转换器将工具提示字符串转换为布尔值。

例如,我有以下内容:

<TextBlock x:Name="textBlock" ToolTipService.IsEnabled="{Binding EntryToolTip, Converter={StaticResource StringNullOrEmptyToBoolConverter}}">
...
</TextBlock>
Run Code Online (Sandbox Code Playgroud)

或者在代码隐藏中

ToolTipService.SetIsEnabled(textBlock, false);
Run Code Online (Sandbox Code Playgroud)