2013-07-02 7 views
6

Etykietki narzędzi na TabItems TabItems nie są odradzane tylko w nagłówku TabItem, ale także na dowolnej zawartości TabItem, która nie definiuje bezpośrednio własnych etykiet narzędzi.ToolTip na TabItem: Pokaż w nagłówku, ale nie na zawartości

Oto przykład, który reprodukuje problem:

<Window x:Class="TestToolTipsOnTabControl.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow"> 
    <Grid> 
     <TabControl> 
      <TabItem Header="Tab1" 
        ToolTip="Tooltip of tab1"> 
       <StackPanel> 
        <TextBlock Text="Content of tab1 with its own tooltip" 
           ToolTip="Tooltip on content of tab1"/> 
        <TextBlock Text="more content of tab1" /> 
       </StackPanel> 
      </TabItem> 
      <TabItem Header="Tab2" 
        ToolTipService.ToolTip="Tooltip of tab2"> 
       <StackPanel> 
        <TextBlock Text="Content of tab2 with its own tooltip" 
           ToolTipService.ToolTip="Tooltip on content of tab2"/> 
        <TextBlock Text="more content of tab2" /> 
       </StackPanel> 
      </TabItem> 
      <TabItem Header="Tab3"> 
       <StackPanel> 
        <TextBlock Text="Content of tab3" /> 
        <TextBlock Text="more content of tab3" /> 
       </StackPanel> 
      </TabItem> 
     </TabControl> 
    </Grid> 
</Window> 

przesuwając kursor myszy nad „więcej treści Wypustu1” tekst zostanie wyświetlona ToolTip które chciałbym tylko pokazać się na nagłówek TabItem.

Czy istnieje sposób, aby ToolTip pojawił się tylko w nagłówku TabItem, ale nigdzie indziej?

Odpowiedz

7

Czy istnieje sposób, aby ToolTip pojawiał się tylko w nagłówku TabItem, ale nigdzie indziej?

Należy stosować tylko Tooltip do nie Header cały TabItem więc go zmienić na:

  <TabItem> 
       <TabItem.Header> 
        <TextBlock Text="Tab1" 
        ToolTip="Tooltip of tab1"/> 
       </TabItem.Header> 
       <StackPanel> 
        <TextBlock Text="Content of tab1 with its own tooltip" 
           ToolTip="Tooltip on content of tab1"/> 
        <TextBlock Text="more content of tab1" /> 
       </StackPanel> 
      </TabItem> 
+0

dzięki. To zdecydowanie jest droga. Moja aktualna aplikacja jest o wiele bardziej skomplikowana niż przykład, który tutaj zamieściłem: Ustawiam etykietkę narzędziową za pomocą stylu, który dostarcza różnych wskazówek w zależności od tego, czy tabItem jest włączony czy wyłączony, do którego musiałem dodać 'ToolTipService.ShowOnDisabled = "Prawda" w opatentowanym ControlTemplate dla TabItems, etc ... Byłem tak zdezorientowany bałaganem w moim kodzie, że przegapiłem oczywiste.Teraz stosuję styl na TextBlock używanym jako nagłówek i wszystko działa dobrze. – axeloide

1

Dodaj poniższy fragment kodu do TextBlocks

tooltip = "", ToolTipSevice. ShowDuration = "0"

+1

Niezła próba, ale jest pusta etykieta narzędzia naraz. –

+0

Dzięki. Ale rzeczywista aplikacja ma dużo treści na TabItems, większość z nich to UserControls wdrożone również w innych miejscach. Byłoby to bardzo kłopotliwe, aby zastosować je do wszystkich. – axeloide

0

Alternatywnie mogę zaoferować to: utworzono Style dla ToolTip z zerowym Width i Height:

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

Kiedy stworzony ToolTip z tym Style i umieszczone w Resources:

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

i przypisać do kontroli, które chcą, aby wyłączyć ToolTip:

<TabItem Header="Tab1" ToolTip="Tooltip of tab1"> 
    <StackPanel> 
     <TextBlock Text="Content of tab1 with its own tooltip" ToolTip="Tooltip on content of tab1"/> 

     <TextBlock Text="more content of tab1" ToolTipService.ToolTip="{StaticResource NoToolTip}" /> 
    </StackPanel> 
</TabItem> 

Note : Podobny problem pojawia się, gdy używasz ToolTip dla TreeViewItem. Jego dzieci dziedziczą rodzica ToolTip.

+0

Dzięki. Ale rzeczywista aplikacja ma dużo treści na TabItems, większość z nich to UserControls wdrożone również w innych miejscach. Byłoby to bardzo kłopotliwe, aby zastosować je do wszystkich. – axeloide

0

Tylko w przypadku, gdy ktoś pracuje w tej kwestii podczas tworzenia zakładek dynamicznie poniższy kod zrobił Magic:

 TabItem tabItem = new TabItem(); 
     var stackPanel = new StackPanel(); 

     var stackPanelToolTip = new System.Windows.Controls.ToolTip(); 
     stackPanelToolTip.Content = "ToolTip content"; 
     stackPanel.ToolTip = (stackPanelToolTip); 

     tabItem.Header = stackPanel; 

Więc kluczem tutaj było dodać podpowiedź do nagłówka zakładki, ale nie element tabulatora (dodanie go do nagłówka oznacza, że ​​etykieta będzie widoczna tylko po najechaniu myszą na kartę).

0

Działa to dla mnie podczas dodawania tabItems dynamicznie:

TabItem nt = new TabItem 
string _newTabItemText = "xxxx" // Dynamic header text 
string _newTabItemTooltip = "xxxx Tooltip" // Dynamic tooltip text 
string _newTabItemName = "xxxx" // tabItem name to reference the tab item in code ie XAML x:name = "xxxx" 
{ 
    Header = new TextBlock() { Text = _newTabItemText, ToolTip = _newTabItemTooltip }, 
    Name = _newTabItemName, 
    Width = 108 
}; 
Powiązane problemy