gpt4 book ai didi

c# - 在 wpf 中禁用 itemscontrol 上的鼠标滚轮

转载 作者:行者123 更新时间:2023-12-04 14:25:39 26 4
gpt4 key购买 nike

我有一个带有滚动查看器的用户控件,然后是一堆子控件,如文本框、单选按钮和列表框等。我可以使用鼠标滚轮滚动父滚动查看器,直到我的鼠标落在列表框内,然后鼠标滚轮事件开始进入列表框。

有没有办法让列表框将这些事件发送回父控件?像这个问题建议的那样从父控件内部删除列表框 ( Mouse wheel not working when over ScrollViewer's child controls ) 不是解决方案。

我试过了

private void ListBox_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
e.Handled = true;
}

但这也没有用。

谢谢

最佳答案

您引用的答案正是导致您的问题的原因,ScrollViewer 中的 ListBox(由 ScrollViewer 等组成)捕获 MouseWheel 事件并处理它,防止它冒泡,因此 ScrollViewer 没有想法事件曾经发生过。

为您的 ListBox 使用以下极其简单的 ControlTemplate 进行演示(注意它没有 ScrollViewer,因此不会捕获 MouseWheel 事件)ScrollViewer 仍会随着鼠标在 ListBox 上滚动。

<UserControl.Resources>
<ControlTemplate x:Key="NoScroll">
<ItemsPresenter></ItemsPresenter>
</ControlTemplate>
</UserControl.Resources>

<ScrollViewer>
<SomeContainerControl>
<.... what ever other controls are inside your ScrollViewer>
<ListBox Template="{StaticResource NoScroll}"></ListBox>
<SomeContainerControl>
</ScrollViewer>

您确实可以选择在鼠标进入 ScrollViewer 时捕获鼠标,这样它会继续接收所有鼠标事件,直到鼠标被释放,但是此选项需要您将任何进一步的鼠标事件委托(delegate)给包含在 ScrollViewer 中的控件ScrollViewer 如果你想要一个响应...下面的 MouseEnter MouseLeave 事件处理程序就足够了。

private void ScrollViewerMouseEnter(object sender, MouseEventArgs e)
{
((ScrollViewer)sender).CaptureMouse();
}

private void ScrollViewerMouseLeave(object sender, MouseEventArgs e)
{
((ScrollViewer)sender).ReleaseMouseCapture();
}

然而,我提供的两种解决方法都不是真正首选的,我建议重新考虑您实际尝试做的事情。如果您在问题中解释您想要达到的目标,我相信您会得到更多建议...

关于c# - 在 wpf 中禁用 itemscontrol 上的鼠标滚轮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4518608/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com