3

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

Root
    Menus
        MainMenu
            MenuItem1
    Button Bars
        MainBar
            Button1

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

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

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

更新


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

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

4

6 回答 6

4

我遇到了完全相同的问题,但我找到了适合我的解决方案。我更改了工具提示的可见性,使其不再出现在空字符串中。

System.Windows.Controls.ToolTip tt = new System.Windows.Controls.ToolTip();
tt.Content = tooltipDescription;
if (tooltipDescription == null)
    tt.Visibility = Visibility.Collapsed;
item.ToolTip = tt;
于 2012-05-14T15:48:12.053 回答
1

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

于 2011-07-28T12:31:16.570 回答
1

对于我自己,我创建了一个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并放置在资源中时:

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

然后为每个项目设置此工具提示:

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

或风格:

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

在这种情况下,项目的空ToolTip将是默认的,但是当您设置我们的ToolTip 时,它将仅为他定义。

于 2013-05-29T11:36:31.047 回答
0

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

到目前为止,您可以使用 null 来屏蔽。

于 2011-07-30T07:24:07.490 回答
0

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

与其他一些答案类似,我使用带有 setterTooltip属性的样式。主要区别在于:

  1. 绑定元素而不是显示提示的Visibility元素。ToolTipTextBlock
  2. TextBlockBorder元素包装。这避免了偶尔看到一个小的、空的尖端块。
<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.Collapsednull 或空字符串,Visibility.Visible否则。

于 2016-04-27T19:31:05.980 回答
0
<[YourControl].Resources>
    <Style TargetType="ToolTip" x:Key="InvisibleToolTip">
        <Setter Property="Visibility"
                Value="Collapsed" />
    </Style>
</[YourControl].Resources>
<[YourControl].ToolTip>
    <ToolTip Style="{StaticResource InvisibleToolTip}"/>
</[YourControl].ToolTip>
于 2019-08-16T16:02:59.423 回答