2013-10-30 24 views
2

我需要以某种方式知道,如果用户点击或移动鼠标到列表框本身或者它的滚动条,但现在我总是得到消息,就像它发生在/在列表框中。如何辨别在ListBox的鼠标事件和其滚动

+0

你需要重写ListBox控件和处理这个自己......不理想,但我不认为有任何其他方式! ''[ – MoonKnight

回答

1

假如你提供一些背景你的问题,它会更容易回答。我有执行上的拖放操作的视觉反馈时,虽然我不知道如果这是你在做什么,做类似的事情。因此,我所能做的就是告诉你我是如何处理我的问题的。

基本上,我用SystemParameters.VerticalScrollBarWidth property这样的:

... 
if (mouseXPositionInListBox > dragSourceControl.ActualWidth - 
    SystemParameters.VerticalScrollBarWidth - dragSourceControl.Padding.Right) 
    isScrolling = true; 
... 

它也可以在XAML中使用:

<Grid Width="{DynamicResource 
    {x:Static SystemParameters.VerticalScrollBarWidthKey}}" /> 

如果你与其他维度的工作,也有SystemParameters.HorizontalScrollBarHeight property


UPDATE >>>

您可以检测是否(垂直)ScrollBar可见通过读取ScrollViewer.VerticalScrollBarVisibilityProperty DependencyProperty的价值:

ScrollBarVisibility visibility = (ScrollBarVisibility)yourListbox.GetValue(
    ScrollViewer.VerticalScrollBarVisibilityProperty); 

可能也有兴趣使用在ScrollViewer.ViewportWidth Property和/或ScrollViewer.ViewportHeight Property它会告诉你ScrollViewer内可见区域的实际大小。

+0

丘是伟大的巫师。 – Yola

+0

但如果没有滚动条的那一刻,如果有什么列表中未充分,然后我需要处理的事件拖累? – Yola

相关问题