我有一个 Windows 窗体应用程序,它有一个 WPF 用户控件,可通过 ElementHost 控件使用。
WPF 用户控件具有旨在响应鼠标滚轮事件的代码。但是,当我运行应用程序并使用鼠标滚轮时,与这些事件相关联的代码都没有在 wpf 中运行。我通过在 Visual Basic 代码中放置断点来测试这一点。尽管如此,它确实会响应其他鼠标事件(例如单击或拖动,我用它来旋转我的 3d 模型)。
我想知道鼠标滚轮事件可能没有从 Windows 窗体传递到 WPF 用户控件,因为 Windows 窗体没有(或有限)鼠标滚轮支持。
相反,我尝试在 WPF 应用程序中编写一个 WPF 用户控件的简单程序,该控件响应鼠标滚轮事件。
WPF 用户控件有一个 viewport3D,我用它来做一些 3d 绘图,而这在 Windows 窗体中是做不到的。
这个问题有解决方法吗?我希望你能帮忙。谢谢你。
这是我如何在 WPF 控件中设置鼠标滚轮事件的示例。我在 UserControl、Grid 和 Canvas 中尝试过,但在其中任何一个中都没有鼠标滚轮事件。
<UserControl x:Class="LPViewport3D"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300" Background="white" MouseMove="UserControl_MouseMove" MouseDown="UserControl_MouseDown" MouseWheel="UserControl_MouseWheel">
<Grid MouseWheel="Grid_MouseWheel" Background="white">
<Viewport3D x:Name="VP" Margin="0" ClipToBounds="False" Grid.Row="0" Grid.Column="0" >
<!-- more code -->
</Viewport3D>
<!-- Ovelay canvas to receive mouse events-->
<Canvas Grid.Row="0" Grid.Column="0"
Background="Transparent"
MouseDown="Canvas_MouseDown"
MouseMove="Canvas_MouseMove" MouseWheel="Canvas_MouseWheel" />
</Grid>