0

我必须在我的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。我必须与我的用户控制类共享该点,该类设置为该类的数据上下文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 数据?我能想到的一种方法是在用户控件的类中添加 WndProc 事件处理程序,但该类不包含 _SourceInitialized 事件处理程序。我怎样才能做到这一点?有没有其他可能的好方法?

PS:用户控制类的所有成员都是非静态的,我正在尝试遵循 MVVM 结构。

4

1 回答 1

1

将点数据放在 Window 的 DataContext 中,让 UserControl 通过绑定或代码(parent.DataContext)从其父级拉取数据

于 2013-06-10T10:23:37.463 回答