我已经创建了一个WPF和WinForm应用程序,我需要做的是 从WPF应用程序打开WinForm。两者都在同一个解决方案中,但它们是不同的项目。
我尝试了以下内容:
Dim newWinForm as New MainWindow
newWinForm.show()
我从这里找到了一个可能的解决方案: Opening winform from wpf application programmatically
但我不明白我到底要做什么。我希望你能帮助我。谢谢!
答案 0 :(得分:9)
通常,您需要在WindowInteropHelper中托管您的表单, 如下面的WPF窗口中的Button.Click事件处理程序:
C#:
private void button1_Click(object sender, RoutedEventArgs e) {
Form1 form = new Form1();
WindowInteropHelper wih = new WindowInteropHelper(this);
wih.Owner = form.Handle;
form.ShowDialog();
}
VB:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
Dim form As New Form1()
Dim wih As New WindowInteropHelper(Me)
wih.Owner = Form.Handle
form.ShowDialog()
End Sub
当然,您需要添加项目的引用/导入和System.Windows.Forms.dll
答案 1 :(得分:0)
假设您将这两个项目称为WPFApp
和WinFormApp
。
它们两个都声明一个MainWindow
类,这是主应用程序窗口。
要从WinFormApp
应用程序打开MainWindow
WPFApp
,只需在WPFApp
项目上执行以下操作:
WinFormApp
项目的引用System.Windows.Forms
的引用WinFormApp.MainWindow
对象Show()
答案 2 :(得分:-1)
不可能从WPF应用程序加载获胜表格。 所以你可以这样:
1-在winform项目中创建一个用户控件,并将所有表单元素添加到用户控件中
public partial class myUserControl : UserControl, IDisposable
{
...// All Form Code and element put here
}
2-创建一个wpf窗口并在其中放入一个网格:
<Grid Name="grid">
</Grid>
3-在Wpf窗口上的代码如下:
public partial class myWpfWindow: Window
{
public myWpfWindow()
{
InitializeComponent();
myUserControl = new myUserControl ();
System.Windows.Forms.Integration.WindowsFormsHost winformHost = new
System.Windows.Forms.Integration.WindowsFormsHost();
winformHost.Child = myUserControl;
grid.Children.Add(winformHost); // --> <Grid Name="grid">
}
}
4-为项目添加两个引用:WindowsFormsIntegration, System.Windows.Forms