如何让TreeViewItems不从其父级继承Tooltip属性

时间:2011-07-28 12:17:28

标签: wpf treeview tooltip treeviewitem

我有一个应用程序,其中是一个准IDE,其中TreeView充当解决方案资源管理器。用户设计的是屏幕布局,看起来像这样。

Root
    Menus
        MainMenu
            MenuItem1
    Button Bars
        MainBar
            Button1

我最初遇到了上下文菜单的问题。在上面的示例中,MenuItem1没有上下文菜单,但MainMenu没有。好吧,MenuItem1将继承MainMenu的上下文菜单。通过创建一个空的上下文菜单并将其分配给MenuItem1,我得到了这个结果。我想要更优雅的东西。

我在工具提示方面遇到了同样的问题。如果我为MainMenu分配一个,那么MenuItem1将继承分配给MainMenu的那个。我尝试将MenuItem1工具提示设置为null,什么也没做。如果我将其设置为“”,空字符串将覆盖MainMenu工具提示,但当您将鼠标悬停在MenuItem1上时,会出现一个小的空工具提示框。我认为系统本身足够智能,如果它是一个空字符串但显然没有显示该框。

如何阻止孩子从父母那里继承上下文菜单和工具提示属性?

更新


仍有问题。我使用Snoop分析了我的项目,它表明这些属性是不健康的,但我仍然没有看到任何破坏继承的解决方案。

我能想到的唯一的问题是,每个工具提示都要处理ToolTipOpening事件并检查字符串,如果它没有长度,则jsut立即关闭它。必须有更好的方法。

6 个答案:

答案 0 :(得分:4)

我遇到了完全相同的问题,但我发现了一个适合我的解决方案。我更改了工具提示的可见性,以便不再显示空字符串。

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

答案 1 :(得分:1)

您是否尝试过设置ToolTipService.IsEnabled="False"这将禁用所需元素上的工具提示。

答案 2 :(得分:0)

首先屏蔽工具提示应该使用null而不是string.empty。其次,如果您已经为树视图使用了分层数据模板和itemssource绑定,那么您可以根据模板层次设置工具提示(例如从模型或itemssource绑定到对象层次结构中的属性),在这种情况下,它们必须已生效根据您的特定树视图项目。

截至目前,您可以使用null来屏蔽。

答案 3 :(得分: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}" />

在这种情况下,item的null 工具提示将是默认值,但是当您设置工具提示时,只会为他定义。

答案 4 :(得分:0)

这里的其他答案对我来说都有问题,所以这里我提出的方法可以避免显示父项目提示的子树项目。

与其他一些答案类似,我使用带有Tooltip属性的setter的样式。关键的区别是:

  1. 绑定Visibility元素的ToolTip,而不是显示提示的TextBlock元素。
  2. 使用TextBlock元素包装Border。这可以避免偶尔看到一个微小的,空的尖端块。
  3. <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的null或emptry字符串,否则为Visibility.Visible

答案 5 :(得分:0)

from pdf2image import convert_from_path
from PIL import Image
import pytesseract
import os

def OCR(pdf):
    pdfName = pdf.split('.pdf')[0]
    pages = convert_from_path(pdf, 500)
    image_counter = 1
    for page in pages:
        filename = "page_"+str(image_counter)+".jpg"
        page.save(pdfName+filename, 'JPEG')
        image_counter = image_counter + 1
    filelimit = image_counter-1
    f= open(pdfName+".txt","wb")
    text = ''
    for i in range(1, filelimit + 1):
        filename = pdfName+"page_"+str(i)+".jpg"
        text += str(((pytesseract.image_to_string(Image.open(filename)))))
        text = text.replace('-\n', '')
        text = text.replace('\n',' \n')
        os.remove(pdfName+"page_"+str(i)+".jpg")
    f.write(text.encode('utf-8','replace'))
    f.close()
    return text