得到WPF窗口上下文形式
我做了一个新的项目更新窗体,并使用它的WinForms(我的主要项目是使用WPF)。得到WPF窗口上下文形式
所以我在MainWindow中做了一些属性。其中之一是:
public Form Context
{
get { return this; }
}
当MainWindow是WinForm时,这很好。但它不是一个WPF窗口。 所以这是不正常的,因为一个错误。
The type MainWindow can not be converted in System.Windows.Forms.Form
有没有办法解决这个问题?
我试过的是使用WindowsFormsHost。所以我添加WindowsFormsHost到我的主窗口:
<WindowsFormsHost>
<wf:Form x:Name="form" />
</WindowsFormsHost>
和编辑MainWindow.xaml.cs如下:
public Form Context
{
get { return form; }
}
但我得到了一个XamlParseException。
WinForms和WPF是不同的框架,都采用Win32 API。在这种情况下,Form和Window对象之间唯一的共同点就是HWND,即窗口的句柄。 理论上,如果两个窗口都知道HWND,他们可以通过它们的消息队列进行通信 - 发送(发布)消息(...),这可能不是您要查找的内容。 最好的方法是坚持使用其中一个框架,或将您的表单转换为控件并将其托管在WindowsFormsHost中。
你是如何将我的表单转换为控件的?我怎样才能把窗户(这个)给我的窗体?如果我的MainWindow是一个WinForm,get {return this; ''会没事的。但它是一个WPF窗口,我需要相同的(this)。我编辑了我的问题,所以你可以看到,我试过了。 – Luranis
在WPF中,Window类有一个属性Content。在XAML中,您可以定义
WinForms中没有框架。框架的模拟是一个面板。就是这样。我需要将WPF的Content属性返回给WinForm。 – Luranis
您的MainWindow是'System.Windows.Window',但是您的属性'Context'的类型为'System.Windows.Forms.Form'。他们是完全不同的类型,你想要做什么? – GWigWam
这听起来像你想在WPF应用程序中托管Windows窗体控件。请尝试并遵循本教程:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/walkthrough-hosting-a-windows-forms-control-in-wpf-by-using-xaml – mnistic
@mnistic很好。我需要什么上下文? The Walkthough是为MaskedTextBox ^^ – Luranis