【问题标题】:How do I hide the empty tooltip in Silverlight?如何在 Silverlight 中隐藏空的工具提示?
【发布时间】:2011-11-12 16:38:41
【问题描述】:

我有一个带有工具提示的 TextBlock,它显示相同的数据,以防被截断。但是,如果 TextBlock.Text 和工具提示的文本绑定到的属性为空(null 或零长度字符串),则工具提示将显示为一个小的空框。在这种情况下,有没有办法隐藏它并且不显示任何工具提示?

<TextBlock Text="{Binding Text}">
    <util:ToolTipManager.ToolTip>
        <TextBlock TextWrapping="Wrap" Text="{Binding Text}" />
    </util:ToolTipManager.ToolTip>
</TextBlock>

我尝试通过将Visibility="{Binding Text, Converter={StaticResource StringToVisConverter}}" 添加到TextBlock 来使用StringToVisibilityConverter,但没有任何运气。

我也尝试实现Hide tooltip if binding is null 给出的答案,但这似乎特定于他们的设置(或者至少我还没有弄清楚如何成功地调整它)。

ToolTipManager来自http://www.codeproject.com/Articles/36078/Silverlight-2-0-How-to-use-a-DataBinding-with-the,用于为tooltip提供数据绑定。)

编辑:

针对cmets,这是我为上述相关问题尝试的XAML:

    <TextBlock Text="{Binding PointName}">
        <local:ToolTipManager.ToolTip>
            <Grid>
                <TextBlock TextWrapping="Wrap" Text="{Binding PointName}"/>
                <Rectangle Fill="Transparent"  Visibility="{Binding PointName, Converter={StaticResource StringToVisConverter}}" />
            </Grid>
        </local:ToolTipManager.ToolTip>
    </TextBlock>

这是我的字符串到可见性转换器代码:

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string visible = (string)value;
        return (!String.IsNullOrWhiteSpace(visible) ? Visibility.Visible : Visibility.Collapsed);
    }

【问题讨论】:

标签: c# silverlight silverlight-4.0


【解决方案1】:

我假设您使用的是 Siverlight 4,因为它是您的标签之一。

在 Silverlight 4 中,我很确定您不再需要 ToolTipManager。

你可以像这样用网格包裹 Rectangle 和 TextBlock,

        <Grid> 
            <TextBlock Text="{Binding PointName}"/> 
            <Rectangle Fill="Transparent" Visibility="{Binding PointName, Converter={StaticResource BooleanToVisibilityConverter}}" ToolTipService.ToolTip="{Binding PointName}"/> 
        </Grid> 

更新:

        <Grid> 
            <TextBlock Text="{Binding PointName}"/> 
            <Rectangle Fill="Transparent" Visibility="{Binding PointName, Converter={StaticResource BooleanToVisibilityConverter}}">
                <ToolTipService.ToolTip>
                    <TextBlock TextWrapping="Wrap" Text="{Binding PointName}"/>             
                </ToolTipService.ToolTip>                       
            </Rectangle> 
        </Grid> 

【讨论】:

  • 我不认为这给了我在工具提示中使用 TextBlock 寻找的文本换行。
  • 我相信 ToolTipService 足够聪明,可以为您包装文本。如果您想在其中定义自己的 TextBlock,您仍然可以。查看我的更新答案
【解决方案2】:

如果您使用的是 Silverlight 5,以下似乎可行:

<ToolTipService.ToolTip>
    <ToolTip Visibility="{Binding WhatDeterminesTooltipVisibility}">
        <Border Background="Azure" Width="100" />
    </ToolTip>
</ToolTipService.ToolTip>

【讨论】:

    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-20
    • 2015-05-23
    相关资源
    最近更新 更多