如何在 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;
}
将 ElementHost
的 Child
属性 转换为您的 WPF 控件类型,例如:
Form_WPF wpfControl = elementHost.Host as Form_WPF;
然后您可以照常访问托管实例的任何成员。
我有一个 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;
}
将 ElementHost
的 Child
属性 转换为您的 WPF 控件类型,例如:
Form_WPF wpfControl = elementHost.Host as Form_WPF;
然后您可以照常访问托管实例的任何成员。