WPF - 动态工具提示

3

我有一个名为ToolTipProvider的类, 其中有一个方法

string GetToolTip(UIElement element)

该功能将根据UIElement本身的属性以及查找可以动态更改的文档来返回指定UIElement的特定工具提示。它还可能在线程中运行,因此当表单首次启动时,工具提示将类似于Visual Studio的“文档缓存仍在构建中”,然后在后台填充。

我希望允许在任何WPF表单中使用此功能,而对开发人员的最小努力。基本上,我想将ObjectDataProvider资源插入到Window.Resources中,以包装我的ToolTipProvider对象,然后我认为我需要在资源中创建一个工具提示(例如称为MyToolTipProvider)引用该ObjectDataProvider,然后在任何需要此工具提示功能的元素上,它只是一个ToolTip="{StaticResource MyToolTipProvider}"的情况,但我无法弄清楚a)如何将实际元素本身绑定到objectdataprovider的MethodParameters,或b)如何强制其每次打开工具提示时都调用该方法。

有关所需模式的任何想法/指针?不要求完整的解决方案,只需要来自经验丰富的人的任何想法。

2个回答

1
  1. 创建一个新的用户控件,作为工具提示视图工厂。

  2. 将您的控件用作工具提示,在绑定中传递您需要的任何数据到您的控件(例如数据、包含的控件等)

<AnyControl>
    <AnyControl.ToolTip>
        <YourToolTipControl Content="{Binding}" />
    </AnyControl.ToolTip>
</AnyControl>

0

虽然我不自称为专家,但我可能会尝试使用附加属性来实现这样的功能。这个属性可以附加到 UI 中的任何元素上,并且您可以指定一个事件处理程序,该处理程序可以访问被附加属性所附加的对象以及传递给附加属性的值。您可以保留对附加属性所附加的元素的引用,然后随时更改工具提示。


我喜欢它,我正在为附加属性注册一个PropertyChangedCallback,以便在属性设置时跟踪所有元素,就像你建议的那样 - 到目前为止似乎工作良好,谢谢。 - Al Mackenzie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接