Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测鼠标是否位于WPF中的列表框项目或滚动条上_C#_Wpf_Listbox - Fatal编程技术网

C# 检测鼠标是否位于WPF中的列表框项目或滚动条上

C# 检测鼠标是否位于WPF中的列表框项目或滚动条上,c#,wpf,listbox,C#,Wpf,Listbox,我有一个弹出窗口,其中包含ListBox。在ListBox PreviewMouseUp事件中,我从ListBox获取所选项目并关闭弹出窗口。但是,即使是ListBox的滚动条也会发送这些PreviewMouseUp事件,因此我无法在不关闭弹出窗口的情况下滚动列表 如何将单击列表中的项目与单击滚动条分开?您应该使用此事件:在列表框中选择的索引已更改。 当您从列表框中选择新项目时,将触发此事件。您不能使用 PreviewMouseLeftButtonUp 事件?仅当您松开鼠标左键时,而不是使用

我有一个弹出窗口,其中包含ListBox。在ListBox PreviewMouseUp事件中,我从ListBox获取所选项目并关闭弹出窗口。但是,即使是ListBox的滚动条也会发送这些PreviewMouseUp事件,因此我无法在不关闭弹出窗口的情况下滚动列表


如何将单击列表中的项目与单击滚动条分开?

您应该使用此事件:在列表框中选择的索引已更改。 当您从列表框中选择新项目时,将触发此事件。

您不能使用

 PreviewMouseLeftButtonUp
事件?仅当您松开鼠标左键时,而不是使用鼠标滚轮滚动时,才应执行此操作。或者,也许使用

SelectedIndexChanged 
事件,以确保您没有单击鼠标按钮,也没有通过该单击选择ListBox元素

编辑:


好的,那么你为什么不处理dbl click事件呢?或者最好添加一个按钮,在单击按钮时获取列表框中的选定项,并对其执行任何操作。

将列表框放在
滚动查看器中可以工作。

是的,但当使用键盘滚动项目时也会触发此操作,所以不能使用键盘而不是鼠标有什么问题?如果你仔细阅读我的问题,我提到在选择值时关闭弹出窗口,因此显然我不能使用SelectedIndexChanged来检测鼠标选择,因为我需要关闭弹出窗口。用户有以下选项:a)用鼠标选择值b)用键盘选择并按Enter键或Space@Jaska抱歉错过阅读,但您可以使用此功能检查是否按下了鼠标按钮。如果使用键盘,你也可以使用else if来做其他事情。我已经通过在ScrollViewer中添加ListBox解决了这个问题,然后滚动条有它自己的事件,ListBox有它自己的事件。我没有提到滚轮,但是,使用滚动条并按下鼠标对用户来说,确认其选择的最明显方式是单击按钮。作为一种替代方法,您可以使用双击事件。最后我自己解决了这个问题-在ScrollViewer中添加列表框实现了这一点。