如何在 Winforms 窗体和由 Winforms 窗体中的 elementhost 托管的 WPF Usercontrol 之间使用委托?

How to use a delegate between a Winforms Form and a WPF Usercontrol hosted by an elementhost in the Winforms form?

我有一个 Winforms 应用程序(class 例如名为 Form_WinForms),我想向其添加一个 elementhost 控件以托管 WPF 用户控件(名为 Form_WPF ).

但我不知道如何处理它们之间的委托:我想与 Form_WinForms 的 Form_WPF 控件交换,反之亦然。我该怎么办?谢谢

在示例中,我只想通过在 Winforms 按钮内单击来修改控件文本框的文本(WPF 技术)。

在 Winforms 中 class:

// In Form_WinForms (my main form)

private void btn_Debug_Click(object sender, EventArgs e)
{
    // Form_WPF.GetInstance().Invoke(new ChangeTextBox_WPF(Form_WPF._ChangeTextBox_WPF), Form_WPF.GetInstance().TextBoxDebug, "test"); // what I would have done if Form_WPF was a WinForms form 
    Form_WPF.GetInstance().Dispatcher.Invoke(new ChangeTextBox_WPF(Form_WPF._ChangeTextBox_WPF), Form_WPF.GetInstance().TextBoxDebug, "test");
}

在 WPF 中 class:

// In the Usercontrol Form_WPF (which is hosted by an elementhost in Winforms)

private delegate void ChangeTextBox_WPF(System.Windows.Controls.TextBox TextBox, String texte);
public static void _ChangeTextBox_WPF(System.Windows.Controls.TextBox TextBox, String texte) { TextBox.Text = texte; TextBox.Tag = texte; }

private static Form_WPF _Form_WPF;

public static Form_WPF GetInstance()
{
    if (_Form_WPF == null)
    {
        _Form_WPF = new Form_WPF();
    }
    return _Form_WPF;
}

ElementHostChild 属性 转换为您的 WPF 控件类型,例如:

Form_WPF wpfControl = elementHost.Host as Form_WPF;

然后您可以照常访问托管实例的任何成员。