0

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>
4

2 に答える 2

0

私はこの問題を解決することができました。私がしなければならなかったのは、コントロールをフォーカス可能として設定し、コントロールにフォーカスを設定することだけでした

WPF ユーザー コントロールをフォーカス可能に設定するには、XAML ファイルにエントリを追加する必要がありました

<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"
         Focusable="True">

次に、WinForms アプリケーションでコントロールにフォーカスを設定する必要がありました。コントロールがフォーカスされて応答することを確認するために、ユーザー コントロール WPF の MouseDown イベントでプログラムによってフォーカスも設定します。

于 2013-11-11T17:56:42.497 に答える