2011-05-06 72 views
26

目前我已經得到以下代碼來顯示工具提示。如果綁定爲null,則隱藏工具提示

<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或空字符串,是否有辦法徹底刪除工具提示?

回答

14

你可以這樣做的一種方法是將ToolTip換成Rectangle並給它一個Transparent的顏色。然後,您只需在此Rectangle上將Visibility設置爲Collapsed即可。

更新:

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

試過包裝一新的邊界,與它裏面的提示服務,並在一個StackPanel的文本塊。然後將綁定添加到檢查字符串是否爲空的布爾值。使用booltovisibile轉換器將該布爾值綁定到新邊框的可見性。但它沒有做任何事。事實上,它禁用每個工具提示:) – 2011-05-06 12:23:54

+0

嗨,請看我更新的答案。您實際上不需要另一個面板,只需使用Rectangle觸發工具提示的隱藏/顯示即可。 :) – 2011-05-06 13:08:15

+1

更新答案的作品!謝謝! – 2011-05-06 13:44:20

-2

你可以創建一個從字符串到布爾轉換器如果字符串長度爲0,否則爲true,然後綁定ToolTip.Active到TooltipInformation與轉換器,返回false。

+1

ToolTip.Active在當前上下文中不可用。 – 2011-05-06 12:12:06

78

隱藏所有控件的空工具提示的一種方法是在App.xaml中包含的資源字典中創建樣式。 這種風格設置爲倒塌的知名度時,提示爲空字符串或空:

<!-- 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> 

還包括(爲的String.Empty)SYS命名空間:

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

完美。我會給你明顯超過+1,如果我可以 – 2012-02-08 01:44:01

+10

Silverlight中沒有觸發器。 – 2012-03-22 21:20:00

+3

這是最好的答案。 – 2013-08-07 18:20:47

0

如果只使用默認的提示我否則會建議在視圖模型中將綁定值設置爲null,或者在項目爲空時使用轉換器。

在我來說,我已經有了一個:

public string Name { get; } 

綁定使用:

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

凡想法是,以顯示工具提示的全名,如果因切缺乏寬度。在我的視圖模型中,我只是:

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

至少在.Net 4.0中,這不會顯示我的工具提示。

0

我遇到了同樣的問題,因爲我將值設置爲String.Empty。將其設置爲null可解決問題。

的WinRT/Windows 8應用XAML

0

這是一個WPF的答案(沒有在Silverlight嘗試過)。

使用ToolTipService.IsEnabled,並將其綁定到工具提示屬性。然後使用轉換器將工具提示字符串轉換爲布爾值。

例如,我有以下幾點:

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

或者在代碼隱藏

ToolTipService.SetIsEnabled(textBlock, false);