3

TreeView がソリューション エクスプローラーとして機能する準 IDE であるアプリケーションがあります。ユーザーが設計するのは、このような画面レイアウトです。

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

私自身のために、高さがゼロのスタイルを作成しました。

<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}" />

この場合、 item の null ToolTipがデフォルトになりますが、ToolTipを設定すると、アイテムに対してのみ定義されます。

于 2013-05-29T11:36:31.047 に答える
1

これを設定してみToolTipService.IsEnabled="False"て、目的の要素のツールチップが無効になります。

于 2011-07-28T12:31:16.570 に答える
0

まず、ツールチップのマスキングは、string.empty ではなく null で行う必要があります。次に、ツリービューに階層データ テンプレートとアイテムソース バインディングを使用した場合、テンプレート階層に基づいてツールチップを設定できます (モデルまたはアイテムソースからオブジェクト階層のプロパティにバインドするなど)。特定のツリービュー項目に基づいています。

今のところ、null を使用してマスクできます。

于 2011-07-30T07:24:07.490 に答える
0

ここでの他の回答にはすべて問題があったため、親アイテムのヒントを表示する子ツリーアイテムを回避するために私が思いついたアプローチを次に示します。

他のいくつかの回答と同様に、Tooltipプロパティにセッターのあるスタイルを使用します。主な違いは次のとおりです。

  1. ヒントを示す要素の代わりに要素のVisibilityをバインドします。ToolTipTextBlock
  2. を要素でラップしTextBlockますBorder。これにより、小さな空の先端ブロックが時折見られることがなくなりました。
<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 または空の文字列を返しますVisibility.Visible

于 2016-04-27T19:31:05.980 に答える