如何从WPF控件引用父窗体

时间:2010-12-20 10:24:56

标签: wpf winforms

我使用elementhost在Windows窗体中托管WPF用户控件。我想知道如何在WPF控件中引用父窗体。

3 个答案:

答案 0 :(得分:16)

这是一种方法,在WPF UserControl内有一个按钮:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        var source = (HwndSource)PresentationSource.FromDependencyObject(button1);
        var host = (Forms.Integration.ElementHost)Forms.Control.FromChildHandle(source.Handle);
        var form = (Forms.Form)host.TopLevelControl;
        // Show form title
        MessageBox.Show(form.Text);
    }

(在此代码Forms中是System.Windows.Forms)的别名

答案 1 :(得分:3)

为什么不以编程方式创建此关系?即,当您将WPF用户控件添加到元素主机时,请将用户控件的Tag属性设置为元素主机实例。

Colin E。

答案 2 :(得分:2)

我建议你

  • 展示来自WPF child control
  • 的活动
  • 在创建时从父级注册该事件,
  • 只要您想要来自子控件的数据
  • ,就会引发该事件
  • 通过设置自定义EventArgs对象中的值来使父控件返回数据。

除非在某些特殊情况下,否则应避免访问父控件。当想要设置从子级到父级的通信时,始终将子事件从子级传播到父容器。