如何在Silverlight中隐藏空工具提示?

时间:2011-09-08 05:21:50

标签: c# silverlight silverlight-4.0

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

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

我尝试使用StringToVisibilityConverterVisibility="{Binding Text, Converter={StaticResource StringToVisConverter}}"添加到TextBlock而没有任何运气。

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

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

编辑:

在回应评论时,这是我为上述相关问题尝试过的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>

这是我的String to Visibility转换器代码:

    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);
    }

2 个答案:

答案 0 :(得分:0)

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

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

你可以用一个Grid包装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> 

答案 1 :(得分:0)

如果您使用的是Silverlight 5,则以下似乎有效:

$line=" <szFilename> &#6; ds  </szFilename>  ";
//$line2=" <szFilenamed1> &#6; ds  </szFilenamed1>  ";
//echo trim($line);
if(preg_match("/[<szFilename>]*/",trim($line))){
    echo "GOT IT";
 }