ElementHost コントロールを介して使用できる 1 つの WPF ユーザー コントロールを持つ Windows フォーム アプリケーションがあります。
WPF ユーザー コントロールには、マウス ホイール イベントに応答するように設計されたコードがあります。ただし、アプリケーションを実行してマウスホイールを使用すると、これらのイベントに関連して記述されたコードは wpf で実行されません。Visual Basic コードにブレークポイントを配置して、これをテストしました。それにもかかわらず、他のマウス イベント (3D モデルの回転に使用するクリックやドラッグなど) には応答します。
Windowsフォームがマウスホイールをサポートしていない(または制限されている)ため、マウスホイールイベントがWindowsフォームからWPFユーザーコントロールに渡されないのではないかと思っていました。
対照的に、WPF アプリケーション内に WPF ユーザー コントロールの簡単なプログラムを作成しようとしました。このコントロールはマウスホイール イベントに応答します。
WPF ユーザー コントロールには viewport3D があり、これを使用して 3D 描画を行いますが、これは Windows フォームでは実行できません。
この問題の回避策はありますか? お役に立てれば幸いです。ありがとうございました。
WPF コントロールで Mousewheel イベントを設定する方法の例を次に示します。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>