这两个应用程序都相当陈旧,并且由几个人构建和维护了几年。目前,WinForms项目中使用的控件之一确实需要在WPF项目中显示。
我已经阅读过在WPF项目中使用WinForms控件,并且在大多数情况下,如果你只是实例化一个常规的空WinForm控件,它似乎相对简单。
我想知道你最好如何在另一个项目中使用大型项目的一部分?理想情况下,WinForm控件将在我们的一个WPF控件中,在ONE选项卡上,在发送并加载所需数据后可见。
答案 0 :(得分:3)
以下是一些一般性指导原则。
从WPF应用程序中,将项目引用添加到:
WindowsFormsIntegration
System.Windows.Forms
修改您的XAML以包含WindowsFormsHost
:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TabControl>
<TabItem Header="Old Form">
<WindowsFormsHost Name="WinFormsHost"></WindowsFormsHost>
</TabItem>
</TabControl>
</Grid>
</Window>
实例化您的旧Form
并将其设置为WindowsFormsHost
的子项。将TopLevel
设置为false
或者它会抱怨“子控件不能是顶级窗体”。同时更改FormBorderStyle
,以防止表单的标题栏显示并允许用户拖动表单。
public MainWindow()
{
InitializeComponent();
WinFormsHost.Child =
new Form1 { TopLevel = false, FormBorderStyle = FormBorderStyle.None };
}
你最终得到这样的东西:
您可以在“Walkthrough: Hosting a Windows Forms Control in WPF”和“WindowsFormsHost Class”的MSDN文档中阅读更多内容。