TabItem上的工具提示:在标题上显示,但不在内容上显示

时间:2013-07-02 09:11:22

标签: wpf xaml tooltip tabcontrol tabitem

TabControl的TabItems上的工具提示不仅在TabItem的标题上产生,而且还在任何未明确设置其自己的工具提示的TabItem内容上产生。

这是一个重现问题的例子:

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

将鼠标指针移到“tab1的更多内容”文本上方,将显示我想要 显示在TabItem标题上的工具提示。

有没有办法让ToolTip只显示在TabItem标题上,但是没有其他地方?

5 个答案:

答案 0 :(得分:8)

  

有没有办法让ToolTip只显示在TabItem标题上,但是没有其他地方?

您应该只将Tooltip应用于Header而不是整个TabItem,因此请将其更改为:

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

答案 1 :(得分:1)

将以下代码添加到文本块

ToolTip =“”,ToolTipSevice.ShowDuration =“0”

答案 2 :(得分:0)

作为替代方案,我可以提供:为Style创建ToolTip,其中WidthHeight<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

使用此Style创建Resources并放入<ToolTip x:Key="NoToolTip" Style="{StaticResource NullToolTip}" />

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> 的控件:

ToolTip

注意:TreeViewItem使用ToolTip时会出现类似问题。他的孩子继承了父母{{1}}。

答案 3 :(得分:0)

以防万一有人在动态创建标签时遇到此问题,以下代码实现了神奇:

<input type="text" name="userName" id="userName">
<button name="contiueButton" id="contiueButton"> Continue </button>

所以这里的关键是将工具提示添加到选项卡标题,但不添加到选项卡元素(将其添加到标题意味着只有当鼠标悬停在选项卡上时才会显示工具提示)。

答案 4 :(得分:0)

这在我动态添加tabItem时适用于我:

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