2011-12-27 7 views
1

私のカスタムコントロールでは、オプションに応じてプログラマティカルにツールチップを有効または無効にしたいと考えています。ここに私のアイコンは、テンプレートで定義された方法です:私は、ツールヒントにアクセスし、有効にするには、このコードを使用していツールヒントがnullです。どのように私はそれにアクセスするのですか?

<Image x:Name="PART_IconImage" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Center" Source="{TemplateBinding Icon}" 
            ToolTipService.ToolTip="{TemplateBinding Caption}" /> 

/それを無効にします。nullを返しますGetToolTip

// Enable tooltip when caption not shown 
      if (this.IconImage != null) 
      { 
       var toolTip = ToolTipService.GetToolTip(this.IconImage) as ToolTip; 

       if (toolTip != null) 
        toolTip.IsEnabled = this.CaptionVisibility.HasValue 
             ? (this.CaptionVisibility.Value == Visibility.Collapsed) 
             : (this.ParentToolbar.CaptionsVisibility == Visibility.Collapsed); 
      } 

を。どんな考え?

P.S.私はここでこのアドバイスに従っていた:How to programmatically access ToolTipService of a Silverlight FrameworkElement? しかし、それは私のために動作しません。

答えて

2

を見てみましょうあなたは、ToolTipService.GetToolTipがnullを返すされていることを確認していますToolTip以外のものを返すのではなく、

あなたのコードに似たコードで簡単に実験したところ、ToolTipService.GetToolTipが文字列を返しました。もちろん、私は文字列依存プロパティーにバインドするToolTipService.ToolTipでした。 GetToolTipからも文字列が返ってきていると思われますが、このメソッドを呼び出した後に追加したas ToolTipはこの文字列をnullにします。

ツールチップをプログラムで無効にする方法の1つは、ツールチップを表示する必要がある場合はツールチップテキストを表示する、またはツールチップを表示しない場合はnullを含むビューモデルのプロパティにバインドする方法です。

また、コントロールのツールチップに文字列の代わりにToolTipを使用することもできます。あなたがToolTipオブジェクトにアクセスし、有効/上記のコードでそれを無効にすることができるはずその方法:

<Image x:Name="PART_IconImage" Stretch="None" VerticalAlignment="Top" HorizontalAlignment="Center" Source="{TemplateBinding Icon}"> 
    <ToolTipService.ToolTip> 
     <ToolTip> 
      <TextBlock Text="{TemplateBinding Caption}" /> 
     </ToolTip> 
    </ToolTipService.ToolTip> 
</Image> 
+0

おそらく、それは文字列を返したことを修正します。私はそれを確認しなかった。私はそれが私のコントロールの中の公有財産ではないので、私は縛ることを躊躇しない。 XAMLを完全に削除し、必要なときに 'ToolTipService.SetToolTip'を実行するコードを書くことで、私はすでにこれを解決しました。私はあなたの方法で動作するので、私はすでに私の答えを持っているので、あなたの答えをマークします – katit

1

boolプロパティと下のプロパティを単にバインドするのはなぜですか?あなたが有効/無効にするだけで

< Image ToolTipService.IsEnabled="{Binding Path=SomeProperty}">

バインドさプロパティを変更したいとき

ToolTipService.IsEnabled 

はその後もHow do you disable tooltips in code at runtime

+0

はその後、今あなたがしている、私はそれが彼がポイントを持っている –

+0

あなたを助けるかもしれない言及リンクを見てみましょうバインディングを使用するつもりですが、MVVMは使用しません。それはハッキーです。 –

+0

前のコメントをすべて削除しました。 Silverlightは依存プロパティとして 'IsEnabled'を公開しません。たとえそれがあったとしても、私は自分のコントロールにそのようなプロパティを公開したくないのです。 – katit

関連する問題