2011-07-28 63 views
2

我有一個應用程序,其中是一個準IDE,其中TreeView充當解決方案資源管理器。用戶是設計師的是一個可能看起來像這樣的屏幕布局。如何讓TreeViewItems不繼承其父母的Tooltip屬性

Root 
    Menus 
     MainMenu 
      MenuItem1 
    Button Bars 
     MainBar 
      Button1 

我最初有上下文菜單的問題。在上面的例子中,MenuItem1沒有上下文菜單,但是MainMenu有。那麼,MenuItem1將繼承MainMenu的上下文菜單。我通過創建一個空的上下文菜單並將其分配給MenuItem1來解決這個問題。我想要更優雅的東西。

我有與工具提示相同的問題。如果我將其中一個分配給MainMenu,則MenuItem1將繼承分配給MainMenu的一個。我試着將MenuItem1工具提示設置爲null,什麼也沒做。如果我將它設置爲「」,一個空字符串將覆蓋MainMenu工具提示,但當您將鼠標懸停在MenuItem1上時,會出現一個小的空工具提示框。我認爲這個系統足夠聰明,不會顯示這個盒子,如果它是一個空串,但顯然不是。

如何防止孩子繼承父母的上下文菜單和工具提示屬性?

更新


這個問題仍然沒有解決。我使用Snoop分析了我的項目,它表明這些屬性是不合格的,但我仍然沒有看到任何解決方案來破壞繼承。

我能想到的唯一的問題是,對於每一個處理ToolTipOpening事件的工具提示並檢查字符串,如果它沒有長度,那就馬上關閉它。但必須有更好的方法。

回答

1

您是否嘗試過設置ToolTipService.IsEnabled="False"這會禁用所需元素上的工具提示。

+0

這不適合我。我需要在後面的代碼中完成它,我嘗試添加ToolTipService.SetIsEnabled(tviMyContainer,false);但它仍然繼承並顯示父級的工具提示。 – WPFNewbie

+1

既不適合我。 –

0

首先掩蓋工具提示應該使用null而不是string.empty。其次,如果你已經使用了分層數據模板和itemssource綁定爲你的樹視圖,那麼你可以根據你的模板層次設置工具提示(例如綁定到你的對象層次結構中的模型或itemssource屬性),在這種情況下,他們必須已經發揮了作用根據您的具體樹視圖項目。

截至目前,您可以使用null來掩蓋。

+1

當您將其設置爲空時,它會自動從父代繼承它。如果您未設置工具提示,則默認爲空。我不得不使它成爲一個空字符串,以使其不從父代繼承。我曾想過重做我的TreeView來正確使用綁定,但現在我沒有時間。 – WPFNewbie

3

我遇到了完全相同的問題,但我找到了適用於我的解決方案。我改變了工具提示的可見性,以便它不再出現空字符串。

System.Windows.Controls.ToolTip tt = new System.Windows.Controls.ToolTip(); 
tt.Content = tooltipDescription; 
if (tooltipDescription == null) 
    tt.Visibility = Visibility.Collapsed; 
item.ToolTip = tt; 
0

至於我自己,我創建了一個風格,零寬度身高

<Style x:Key="NullToolTip" TargetType="{x:Type ToolTip}"> 
    <Setter Property="Width" Value="0" /> 
    <Setter Property="Height" Value="0" /> 
    <Setter Property="Content" Value="{x:Null}" /> 
</Style> 

當我創建工具提示這種風格,並放置在資源:

<ToolTip x:Key="NoToolTip" Style="{StaticResource NullToolTip}" /> 

然後爲每個項目設置此工具提示:

<TreeViewItem Header="Sample" ToolTipService.ToolTip="{StaticResource NoToolTip}"> 

或風格:

<Setter Property="ToolTipService.ToolTip" Value="{StaticResource NoToolTip}" /> 

在這種情況下,空工具提示的項目將被默認的,但是當你設置我們工具提示,只會對他進行定義。

0

這裏的其他答案都對我有問題,所以這裏是我想出的方法,它避免了子樹項目顯示父項目的提示。

與其他一些答案類似,我使用Tooltip屬性的setter類型。主要的差異是:

  1. 綁定ToolTip元件,而不是示出了尖端TextBlock元件的Visibility
  2. Border元素包裝TextBlock。這避免偶爾看到一個微小的,空的頂端塊。
<local:StringToVisibilityConverter x:Key="strToVisibilityConverter"/> 

<Style x:Key="MyTreeStyleKey" TargetType="TreeViewItem"> 
    <Setter Property="ToolTip"> 
    <Setter.Value> 
     <ToolTip Visibility="{Binding TipText, Converter={StaticResource strToVisibilityConverter}}"> 
     <Border> 
      <TextBlock Text="{Binding TipText}"/> 
     </Border> 
     </ToolTip> 
    </Setter.Value> 
    </Setter> 
</Style> 

StringToVisibilityConverter是一個簡單的轉換我創建了返回Visibility.Collapsed爲空或emptry字符串,Visibility.Visible否則。