Windows 10 UWP应用程序c# - 禁用组合框中的鼠标滚轮

3
如何在组合框控件中禁用鼠标滚轮?
<ComboBox x:Name="ListDates" SelectedValuePath="Tag" Width="185" Background="#FFFFCC00" BorderThickness="1" Margin="12,8,0,0"/>

为什么要这样做呢?这只会让你的用户感到烦恼,因为鼠标滚轮无法使用。如果你有充分的理由需要这样做,请告诉我们是什么原因。 - Kris Vandermotten
如果组合框具有焦点并且鼠标悬停在其上方,则不应该能够滚动。 - kendoo
为什么不允许用户使用鼠标滚轮来滚动它呢?为什么要强制他们使用滚动条或键盘呢?您确定不想使用垂直滚动链接吗?(参见https://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.scrollviewer.isverticalscrollchainingenabled.aspx) - Kris Vandermotten
我通过选择另一个项目来设置焦点,从而解决了这个问题。 - kendoo
1
@KrisVandermotten 因为在滚动页面时值可能会被意外更改。 - Alberto Rivelli
1
如果kendoo和我遇到了同样的问题,那么这个问题就是只有在组合框关闭时才禁用鼠标滚轮滚动。 - Alberto Rivelli
2个回答

4

这个解决方案比较啰嗦但是有效。创建你自己的下拉框类,然后重写 OnPointerWheelChanged 方法并留空。

public class ComboBoxNoWheel: ComboBox
{
    protected override void OnPointerWheelChanged(PointerRoutedEventArgs e)
    {

    }
}

您可以添加e.handled = true,但根据我的测试,这没有任何区别。当下拉框打开时滚动正常工作。


实际上,当e.handled = true存在时,有一个重要的区别。如果存在,并且指针位于ComboBox上方,父级ScrollViewer将不会接收到PointerWheelChanged事件。因此,滚动不起作用。如果e.handled = true不存在,即使指针位于ComboBox上方,父级ScrollViewer仍会接收到事件。 - undefined

2
如果你必须这样做,那么很简单——只需在内部ScrollViewer上禁用垂直滚动即可。
<ComboBox x:Name="ListDates" 
          ScrollViewer.VerticalScrollMode="Disabled" 

不,我的意思是当组合框获得焦点并且鼠标悬停在组合框上时的滚动。 - kendoo

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