2009-04-27 15 views
2

おはようございます、 私は従来のWinformsアプリケーションで作業する必要がありますが、WPFに移行したいと思います。ツールチップコントロールがないので、WPFツールチップオブジェクトを使いたいです。WPFツールチップのバインドが更新されない

ツールチップオブジェクトのグローバルインスタンスを1つ作成します。私はその中のコントロールをバインドして、私のアプリケーションはツールチップのデータコンテキストを設定します。私は手動で正確にツールチップを表示して非表示にすることができます。オブジェクトの上にマウスを移動すると、それは結合されたデータを完全にピックアップし、素晴らしい動作をします。別のコントロールを移動すると、ツールチップのdatacontextは変更されますが、表示されたデータは決してリロードされません。

私はプロパティ変更イベントを実装しようとし、バインドするオブジェクトのINotifyPropertyChangedインターフェイスを使用しました。 wpfのヒントがイベントをリッスンしていないようです。

私はバインディングモードをOneway(表示専用のツールチップ)に設定しようとしました。

ツールチップがプログラムによって作成されます。

// build the tooltip window. 
System.Windows.Controls.Image img = new System.Windows.Controls.Image(); 
img.Width = 50; 
img.Height = 60; 

// bind the image 
System.Windows.Data.Binding imageBinding = new System.Windows.Data.Binding("PatientImage.Data"); 
imageBinding.Mode = System.Windows.Data.BindingMode.OneWay; 
imageBinding.Source = bed; 
img.SetBinding(System.Windows.Controls.Image.SourceProperty, imageBinding); 

// wrap image in a border 
System.Windows.Controls.Border brdr = new System.Windows.Controls.Border(); 
brdr.BorderBrush = System.Windows.Media.Brushes.Blue; 
brdr.Margin = new System.Windows.Thickness(6); 
brdr.Child = img; 

System.Windows.Controls.WrapPanel wp = new System.Windows.Controls.WrapPanel(); 

System.Windows.Controls.TextBlock tb = new System.Windows.Controls.TextBlock(); 
tb.Background = System.Windows.Media.Brushes.LightBlue; 
tb.Foreground = System.Windows.Media.Brushes.Blue; 

// bind the text block 
System.Windows.Data.Binding textBlockBinding = new System.Windows.Data.Binding("TooltipText"); 
textBlockBinding.Mode = System.Windows.Data.BindingMode.OneWay; 
textBlockBinding.Source = bed; 
tb.SetBinding(System.Windows.Controls.TextBlock.TextProperty, textBlockBinding); 

wp.Children.Add(brdr); 
wp.Children.Add(tb); 

bedTooltip = new System.Windows.Controls.ToolTip(); 
bedTooltip.Content = wp; 

任意のアイデアなぜこれが動作しませんか?回避策として単一のグローバルなコントロールではなく、コントロールごとにツールチップオブジェクトを使用する必要がありますか?

+0

- 私はコントロールごとに1つのツールチップを作成すればうまくいきます。これは回避策ですが、DataContextプロパティを変更した場合に更新されない理由を理解したいと思います。おそらくツールチップのオブジェクトデザインはこのように使用されることはありませんでしたか? – Jay

答えて

0

バインディングはSourceを指定します。これは、DataContextを気にしなくなり、ソースオブジェクトのプロパティ以外のものが変更された場合でもバインディングが更新されないためです。

関連する問題