簡體   English   中英

Windows窗體中托管的WPF控件中的Mousewheel事件

[英]Mousewheel events in wpf control hosted in Windows forms

我有一個Windows Forms應用程序,該應用程序具有一個WPF用戶控件,可通過ElementHost控件使用。

WPF用戶控件的代碼旨在響應鼠標滾輪事件。 但是,當我運行應用程序並且使用鼠標滾輪時,與這些事件相關的書面代碼都沒有在wpf中運行。 我通過在可視化基本代碼中放置斷點進行了測試。 盡管如此,它仍會響應其他鼠標事件(例如單擊或拖動,這是我用來旋轉3d模型的事件)。

我想知道也許鼠標滾輪事件沒有從Windows窗體傳遞到WPF用戶控件,因為Windows窗體沒有(或有限)鼠標滾輪支持。

相反,我嘗試 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>

我們發現您必須將處理程序連接到ElementHost.HostContainer.MouseEnter事件,並將焦點設置回那里的地圖。 我們從SO帖子中找到了如何做到這一點的方法: https//stackoverflow.com/a/15464539/2250424

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        elementHost1.HostContainer.MouseEnter += HostContainer_MouseEnter;
    }

    private void HostContainer_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e)
    {
        mapControl1.bingMap.Focus();
    }
}

我設法解決了這個問題。 我要做的就是將控件設置為可聚焦,並將焦點設置為控件

要將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應用程序中,我需要將焦點設置到控件上。 為了確保控件獲得焦點並做出響應,我還通過編程在usercontrol WPF MouseDown事件中設置了焦點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM