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

时间:2011-05-06 11:51:38

标签: c# silverlight xaml binding tooltip

目前我已经有了以下代码来显示工具提示。

<Border BorderBrush="Black"
        BorderThickness="{Binding Border}"
        Height="23"
        Background="{Binding Color}">
<ToolTipService.ToolTip>
    <TextBlock Text="{Binding TooltipInformation}" />
</ToolTipService.ToolTip>

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

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

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

6 个答案:

答案 0 :(得分:91)

隐藏所有控件的空工具提示的一种方法是在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>

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

xmlns:sys="clr-namespace:System;assembly=mscorlib"

答案 1 :(得分:15)

您可以采用的一种方法是将ToolTip包裹在Rectangle中,并为其指定Transparent颜色。然后,您只需在此Visibility上将Collapsed设置为Rectangle

<强>更新

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

答案 2 :(得分:3)

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

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

例如,我有以下内容:

<TextBlock x:Name="textBlock" ToolTipService.IsEnabled="{Binding EntryToolTip, Converter={StaticResource StringNullOrEmptyToBoolConverter}}">
...
</TextBlock>

或代码隐藏

ToolTipService.SetIsEnabled(textBlock, false);

答案 3 :(得分:1)

我遇到的问题与我为String.Empty设置值有关。将其设置为null可以解决问题。

WinRT / Windows 8 App XAML

答案 4 :(得分:0)

如果只使用默认工具提示,我会建议在视图模型中将绑定值设置为null,或者在项目为空时使用转换器。

就我而言,我有一个:

public string Name { get; }

使用绑定:

<TextBlock Text="{Binding Name}" TextTrimming="CharacterEllipsis" Tooltip="{Binding Name}" />

如果由于缺少宽度而切割时,想法是在工具提示中显示全名。在我的viewmodel中,我只是:

if (string.IsNullOrEmpty(Name)) Name = null;

至少在.Net 4.0中,这不会为我显示工具提示。

答案 5 :(得分:-2)

您可以创建一个从string到bool的转换器,如果字符串长度为0则返回false,否则返回true,然后将ToolTip.Active绑定到TooltipInformation与该转换器。