C# 防止ScrollViewer吞下MouseweelEvent(更新:DevExpress LayoutControl是原因)
我有一个UserControl,它包含一个ScrollViewer,其中包含一个画布。 我有自定义的缩放逻辑,但如果ScrollViewer可以滚动,它会完全吞下鼠标滚轮事件。当到达底部时,缩放工作没有问题C# 防止ScrollViewer吞下MouseweelEvent(更新:DevExpress LayoutControl是原因),c#,wpf,xaml,devexpress,C#,Wpf,Xaml,Devexpress,我有一个UserControl,它包含一个ScrollViewer,其中包含一个画布。 我有自定义的缩放逻辑,但如果ScrollViewer可以滚动,它会完全吞下鼠标滚轮事件。当到达底部时,缩放工作没有问题 private void CanvasOverlayControl_PreviewMouseWheel(object sender, MouseWheelEventArgs e) { if(Keyboard.IsKeyDown(Key.LeftCtrl) || Key
private void CanvasOverlayControl_PreviewMouseWheel(object sender, MouseWheelEventArgs e) {
if(Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl)) {
if(e.Delta > 0) {
// Wheel up
Zoom *= 1.15f;
} else if(e.Delta < 0) {
// Wheel down
Zoom *= 0.85f;
}
}
}
我怎样才能制止这种行为
编辑:
我发现DevExpress LayoutControl导致了这种情况,因为它处理内容的滚动。有没有办法禁用此功能
提前感谢让我们从基础开始。。。确保画布实际上正在获取任何鼠标事件。它需要一些背景来允许命中测试
<Canvas Background="Transparent"
代码隐藏
PreviewMouseWheel += CanvasOverlayControl_PreviewMouseWheel;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Canvas_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
e.Handled = true;
}
}
观察结果:当鼠标在画布的绿色区域上时,鼠标滚轮上没有滚动。当鼠标在画布外时,scrollviewer会滚动。我尝试过这个方法,但只有当scrollviewer不能再滚动时才会调用我的方法。@horotab用我的示例代码编辑。请尝试验证是否对同一代码得到相同的结果。如果你能复制我的样本,你需要找出,在你的实际项目中有什么不同。如果你不能复制,那么我们的系统在某种程度上是非常不同的,我可能帮不了你。@horotab你检查过这个例子吗?问题还没有解决吗?是的,我发现问题在于我有一个Devexpress.LayoutControl在外面处理滚动。你知道如何防止它这样做吗?我不想用网格构建UI:(@horotab抱歉,我不熟悉DevExpress。如果您仍然希望得到答案,您必须用新信息更新您的问题。
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Canvas_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
e.Handled = true;
}
}