我必须在WPF
应用程序中处理Windows事件。为此,我设置了projectName_SourceInitialized
,如下所示:
private void FieldPlannerWnd_SourceInitialized(object sender, EventArgs e)
{
IntPtr windowHandle = (new WindowInteropHelper(Application.Current.MainWindow)).Handle;
HwndSource src = HwndSource.FromHwnd(windowHandle);
src.AddHook(new HwndSourceHook(WndProc));
}
为此,我的WndProc
函数必须属于同一个类(MainWindow
类)。
我的WndProc
将要处理的消息来自遗留代码,它基本上会在Lparam和Wparam中将此类发送给POINT。我必须与我的USER CONTROL类共享该POINT,该类被设置为此MainWindow
类的数据上下文。这就是我的WndProc
程序的样子:
private IntPtr WndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
switch (msg)
{
case WM_POINTDATASENT:
//gm.GAInfo = new GAInfo();
PointsVector pt = new PointsVector();
pt.X = wParam.ToInt32();
pt.Y = lParam.ToInt32();
//WellGeometriesView.FirstSlotLocation = pt;
//WellGeometriesViewModel.FirstSlotLocation = pt;
//gm.GetCoordinates(wParam, lParam);
break;
}
return IntPtr.Zero;
}
由于我在主窗口的类中没有USER Control类的任何成员变量,所以我如何与UserControl的类共享在WndProc中收到的这个POINT数据? 我能想到的一种方法是在User Control的类中添加WndProc事件处理程序,但该类不包含_SourceInitialized事件处理程序。任何人都可以分享我能做到的方式吗?还有其他好办法吗?
P.S :USER CONTROLS类的所有成员都是非静态的,我正在尝试遵循MVVM结构。
请帮忙。提前谢谢。
答案 0 :(得分:1)
将点数据放在Window的DataContext中,让UserControl通过绑定或代码(parent.DataContext)从父对象中提取数据