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

C# 如果绑定为null,则隐藏工具提示,c#,silverlight,xaml,binding,tooltip,C#,Silverlight,Xaml,Binding,Tooltip,目前,我有以下代码来显示工具提示 <Border BorderBrush="Black" BorderThickness="{Binding Border}" Height="23" Background="{Binding Color}"> <ToolTipService.ToolTip> <TextBlock Text="{Binding TooltipInformation}" /> </To

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

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

这在ItemsControl中显示,其中包含大约25个项目。其中只有一小部分的值设置为
tooltipinfo

如果
tooltipinfo
是一个空字符串,它仍然将包含文本块的tooltipbox显示为一个非常小的窗口(大约5px高,20px宽)。即使我将textblock Visibility设置为“折叠”


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

可以这样做的一种方法是将
工具提示
包装在
矩形
中,并给它一个
透明的
颜色。然后您只需将此
矩形上的
可见性设置为
折叠

更新:

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


您可以创建一个从字符串到布尔的转换器,如果字符串长度为0,则返回false,否则返回true,然后使用该转换器将ToolTip.Active绑定到ToolTip信息。

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

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

就我而言,我有一个:

public string Name { get; }
绑定使用:

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

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

我在将值设置为String.Empty时遇到了相同的问题。将其设置为null可以解决此问题

WinRT/Windows 8应用程序XAML这是一个WPF答案(尚未在Silverlight中尝试)

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

例如,我有以下几点:

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

工具提示。Active在当前上下文中不可用。尝试包装一个新边框,其中包含工具提示服务和stackpanel中的textblock。然后向布尔值添加绑定,该布尔值检查字符串是否为空。使用布尔可视转换器将该布尔值绑定到新边界的可视性。但它什么也没做。事实上,它禁用了所有工具提示:)嗨,请查看我的更新答案。实际上,您不需要另一个面板,只需使用一个矩形来触发工具提示的隐藏/显示。:)完美的如果我能在silverlight中没有触发器,我会给你大大超过+1。这是最好的答案。如果
Content
是一个UI元素,例如
TextBlock
,则不起作用。添加
BasedOn=“{StaticResource{x:Type ToolTip}
,以避免破坏现有样式(例如来自主题)+1这对我来说很有用,并且更适合我们的应用程序。我们在许多不同类型的控件中可能有几十个工具提示,因此样式设置仍然是多余的。此外,我们在某些地方(但不是其他地方)有专门的工具提示。这种方法允许使用一种方式,即“去掉空白”,我们可以在任何地方使用。
if (string.IsNullOrEmpty(Name)) Name = null;
<TextBlock x:Name="textBlock" ToolTipService.IsEnabled="{Binding EntryToolTip, Converter={StaticResource StringNullOrEmptyToBoolConverter}}">
...
</TextBlock>
ToolTipService.SetIsEnabled(textBlock, false);