Как использовать делегат между формой Winforms и WPF Usercontrol, размещенным на элементе в форме Winforms? - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть приложение Winforms (класс с именем Form_WinForms для примера), и я хочу добавить к нему элемент elementhost для размещения WPF Usercontrol (с именем Form_WPF).

Но я не знаю как обращаться с делегатами между ними: я хочу обменяться с элементами управления Form_WPF из Form_WinForms и наоборот. Как я мог сделать? Спасибо

В этом примере я просто хочу изменить текст текстового поля элемента управления (WPF technolog ie), щелкнув внутри кнопки Winforms.

В классе Winforms:

// 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:

// 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;
}

1 Ответ

1 голос
/ 14 февраля 2020

Приведите свойство Child ElementHost к вашему типу элемента управления WPF, например:

Form_WPF wpfControl = elementHost.Host as Form_WPF;

Затем вы можете получить доступ к любым членам размещенного экземпляра, как обычно.

...