おはようございます、 私は従来の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;
任意のアイデアなぜこれが動作しませんか?回避策として単一のグローバルなコントロールではなく、コントロールごとにツールチップオブジェクトを使用する必要がありますか?
- 私はコントロールごとに1つのツールチップを作成すればうまくいきます。これは回避策ですが、DataContextプロパティを変更した場合に更新されない理由を理解したいと思います。おそらくツールチップのオブジェクトデザインはこのように使用されることはありませんでしたか? – Jay