2

大家下午好,我必须使用旧版 Winforms 应用程序,但我想开始将其迁移到 WPF。它现在没有工具提示控件,所以我想使用 WPF 工具提示对象。

我创建了一个工具提示对象的单个全局实例。我已经在其中绑定了控件,并且我的应用程序设置了工具提示的数据上下文。我可以手动显示和隐藏工具提示。我第一次将鼠标悬停在一个对象上时,它会完美地拾取绑定数据并且效果很好。当我移过另一个控件时,工具提示数据上下文已更改,但显示的数据永远不会重新加载。

我尝试实现属性更改事件并在绑定到的对象中使用 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;

知道为什么这不起作用吗?也许我需要为每个控件使用一个工具提示对象而不是一个全局对象作为解决方法?

4

1 回答 1

0

绑定指定 a Source,因为它们不再“关心” DataContext ,因此如果源对象上的属性本身之外的任何其他内容发生更改,则绑定不会更新。

于 2011-06-13T22:51:23.217 回答