12

TabControl 的 TabItems 上的工具提示不仅在 TabItem 的标题上产生,而且在任何未明确设置其自己的 ToolTip 的 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 标题上,而其他地方都没有?

4

5 回答 5

14

有什么方法可以让 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>
于 2013-07-02T09:21:41.133 回答
2

将以下代码添加到文本块

工具提示="",工具提示服务.ShowDuration="0"

于 2013-07-02T09:30:50.557 回答
2

动态添加 tabItems 时,这对我有用:

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
};
于 2017-08-05T01:28:49.687 回答
0

作为替代方案,我可以提供的是:用零和创建一个Stylefor :ToolTipWidthHeight

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

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

于 2013-07-02T09:44:08.913 回答
0

以防万一有人在动态创建选项卡时遇到此问题,以下代码起到了神奇的作用:

        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;

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

于 2017-06-26T12:45:40.537 回答