2011-07-28 14 views
2

私は、TreeViewがソリューションエクスプローラとして機能する準IDEであるアプリケーションを持っています。ユーザーがデザイナーであるものは、このように見える画面レイアウトです。TreeViewItemsが親からTooltipプロパティを継承しないようにする方法

Root 
    Menus 
     MainMenu 
      MenuItem1 
    Button Bars 
     MainBar 
      Button1 

私はもともとコンテキストメニューに問題がありました。上の例では、MenuItem1にはコンテキストメニューはありませんが、MainMenuではありません。さて、MenuItem1はMainMenuからコンテキストメニューを継承します。私は空のコンテキストメニューを作成し、それをMenuItem1に割り当てることでこれを得ました。私は何かもっとエレガントにしたいです。

私はツールチップで同じ問題があります。 MainMenuに1を割り当てると、MainItem1はMainMenuに割り当てられたものを継承します。 MenuItem1のヒントをnullに設定しようとしましたが、何もしませんでした。 ""に設定すると、空の文字列でMainMenuのツールチップが上書きされますが、MenuItem1の上にカーソルを置くと小さな空のツールチップボックスが表示されます。私はシステムが空の文字列であっても明らかにそうでないならば、ボックスを表示しないほどスマートに思った。

子どもが親からコンテキストメニューとツールチップのプロパティを継承しないようにするにはどうすればよいですか?

はまだこれで問題を抱えて


を更新しました。私はSnoopを使ってアイテムを分析しましたが、これはこれらのプロパティが表示されていないことを示していますが、継承を破棄する解決策はまだありません。

私が考えることができる唯一の悩みは、すべてのツールチップがToolTipOpeningイベントを処理して文字列を検査するために、長さがない場合は直ちに閉じます。しかし、良い方法が必要です。

答えて

1

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

+0

それは私にとってはうまくいかなかった。コードの背後でそれを行う必要があり、ToolTipService.SetIsEnabled(tviMyContainer、false)を追加しようとしました。親からツールヒントを継承して表示しました。 – WPFNewbie

+1

私のために働かなかった。 –

0

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

現在のところ、nullはマスクするために使用できます。

+1

nullに設定すると、自動的に親から継承されます。ツールチップを設定していない場合のデフォルト値はnullです。親から継承しないようにするために、空の文字列にしなければなりませんでした。バインディングを正しく使用するためにTreeViewをやり直すことを考えましたが、今は時間がありません。 – WPFNewbie

3

私はまったく同じ問題に遭遇しましたが、私にとってはうまくいくソリューションが見つかりました。空の文字列にツールチップが表示されなくなるように、ツールチップの表示を変更しました。

System.Windows.Controls.ToolTip tt = new System.Windows.Controls.ToolTip(); 
tt.Content = tooltipDescription; 
if (tooltipDescription == null) 
    tt.Visibility = Visibility.Collapsed; 
item.ToolTip = tt; 
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}" /> 

、項目のヌルヒントがデフォルトになりますが、あなたが私たちのツールヒントを設定すると、それだけで彼のために定義されます。

0

他の回答は私には問題がありましたので、親アイテムのヒントを示す子ツリーアイテムは避けています。

他の回答と同様に、私はTooltipプロパティのためのセッターのスタイルを使用します。主な相違点は以下のとおりです。

  1. ToolTip要素の代わりに、先端を示すTextBlock要素のVisibilityを結合します。
  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

は、そうでない場合はnullまたはemptry文字列の Visibility.CollapsedVisibility.Visibleを返し、私が作成したシンプルなコンバータです。

関連する問題