C# 如何在Winforms窗体和Winforms窗体中elementhost托管的WPF Usercontrol之间使用委托?
我有一个Winforms应用程序(例如名为Form_Winforms的类),我想向它添加一个elementhost控件,以便托管一个WPF用户控件(名为Form_WPF) 但是我不知道如何处理它们之间的委托:我想与来自表单的表单WPF控件交换,反之亦然。我怎么办?谢谢 在本例中,我只想通过在Winforms按钮内单击来修改控件文本框(WPF technologie)的文本 在Winforms类中:C# 如何在Winforms窗体和Winforms窗体中elementhost托管的WPF Usercontrol之间使用委托?,c#,wpf,winforms,delegates,elementhost,C#,Wpf,Winforms,Delegates,Elementhost,我有一个Winforms应用程序(例如名为Form_Winforms的类),我想向它添加一个elementhost控件,以便托管一个WPF用户控件(名为Form_WPF) 但是我不知道如何处理它们之间的委托:我想与来自表单的表单WPF控件交换,反之亦然。我怎么办?谢谢 在本例中,我只想通过在Winforms按钮内单击来修改控件文本框(WPF technologie)的文本 在Winforms类中: // In Form_WinForms (my main form) private void
// 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;
}
将
ElementHost
的子属性强制转换为WPF控件类型,例如:
Form_WPF wpfControl = elementHost.Host as Form_WPF;
然后,您可以像往常一样访问托管实例的任何成员。您好,我的elementhost的子属性已形成\u WPF,当我按下Winforms调试按钮时,委托函数\u ChangeTextBox\u WPF
将触发,但是WPF文本框的文本没有改变,可能是因为您设置了错误实例的text
属性。清除所有静电物质。你不需要它。如果我删除它,我会在Form_WPF.GetInstance().Dispatcher.Invoke(new ChangeTextBox_WPF(Form_WPF.\u ChangeTextBox_WPF),Form_WPF.GetInstance().TextBoxDebug,“test”)代码>:“非静态字段、方法或属性‘Form_WPF.GetInstance()’需要对象引用。是否删除该行并尝试我的示例代码?”?同样,您应该强制转换承载WPF控件的ElementHost
控件的子属性。如果有其他问题,请提出新问题。避免在评论中进行冗长的讨论。