[英]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.