在WPF中的事件?

我正试图在WPF MVVM应用程序中实现一个工具提示系统。 该工具提示应该出现在作为MainWindow的一部分的特定Label中(不会悬停在鼠标指针上),并且应该发生在鼠标悬停(理想情况下具有可配置的延迟但不重要),调用方法在适当的ViewModel中。 然后,ViewModel将处理联系模型层,该层将解析显示哪个工具提示等。

我的问题是如何从视图到ViewModel获得一个鼠标悬停事件,以及触发该事件的对象的身份(以便我可以为其解析正确的工具提示)。 假设我在SettingsView.xaml中有一个<Label Name="MyLabel" Content="This is a label" /> ,如何使用MyLabel作为参数调用SettingsViewModel中的GetTooltip(string id)方法或以其他方式访问)在鼠标悬停? 我可以使用常规的<Trigger>以某种方式做到这一点吗?


你需要做的是将一些命令(视图模型与视图中的事件交互的首选方法)连接到鼠标事件,然后用适当的信息“填充”你的“工具提示”控件。

例如,您的ViewModel具有一个ToolTip属性(表示单向,只能获取ToolTipViewModel),该属性可以绑定到UI的一个区域(使用DataTemplate)。 您绑定到新的“MouseOver”命令并根据命令填充/取消ToolTipViewModel属性中的对象。 这允许可测试性,零代码隐藏,以及使用DataTemplates构建工具提示演示文稿。

看看这个链接,看看如果在通常“非命令”控件上构建命令并绑定它们可能会解决您的问题。


首先,你是否尝试过内置的ToolTip控件? 它可能会为您提供您所需的免费内容,并且可以对其进行样式化或模板化以承载复杂的内容。

其次,您可以使用每个WPF控件上提供的MouseEnter事件。 不过,您必须将处理程序附加到您想要支持的控件上。

为了一般地覆盖每个控件,考虑在父WindowPreviewMouseMove事件中附加一个处理程序(或者在Window的代码隐藏中重写OnPreviewMouseMove ),只要有任何子元素即将接收该事件,就会调用它。 然后您可以使用HitTest找出鼠标指针下的控件。 然而,这并不是非常有效,这就是为什么你可以通过内置的ToolTip控件获得更好的效果。


在控件模板中创建一个带有嵌套TextBlock的Popup控件(为标签创建一个样式),将其可见性属性绑定到IsMouseOver时,然后将PlacementTarget绑定到窗口底部的控件,并将它显示在窗口的底部。 与水平/垂直偏移属性一起使用。

链接地址: http://www.djcxy.com/p/6721.html

上一篇: over event in WPF?

下一篇: Compact gem or libraries for improving Ruby skills?