得到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。

+1

您的MainWindow是'System.Windows.Window',但是您的属性'Context'的类型为'System.Windows.Forms.Form'。他们是完全不同的类型,你想要做什么? – GWigWam

+1

这听起来像你想在WPF应用程序中托管Windows窗体控件。请尝试并遵循本教程:https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/walkthrough-hosting-a-windows-forms-control-in-wpf-by-using-xaml – mnistic

+0

@mnistic很好。我需要什么上下文? The Walkthough是为MaskedTextBox ^^ – Luranis

WinForms和WPF是不同的框架,都采用Win32 API。在这种情况下,Form和Window对象之间唯一的共同点就是HWND,即窗口的句柄。 理论上,如果两个窗口都知道HWND,他们可以通过它们的消息队列进行通信 - 发送(发布)消息(...),这可能不是您要查找的内容。 最好的方法是坚持使用其中一个框架,或将您的表单转换为控件并将其托管在WindowsFormsHost中。

+0

你是如何将我的表单转换为控件的?我怎样才能把窗户(这个)给我的窗体?如果我的MainWindow是一个WinForm,get {return this; ''会没事的。但它是一个WPF窗口,我需要相同的(this)。我编辑了我的问题,所以你可以看到,我试过了。 – Luranis

+0

在WPF中,Window类有一个属性Content。在XAML中,您可以定义 ...标记中的内容。例如,您可以通过创建带有窗口内容的UserControl来将WPF窗口转换为控件。我的练习中没有使用过WinForms,但你应该可以做同样的事情。什么是WinFoms中的UserControl的异端?一个框架? – shadow32

+0

WinForms中没有框架。框架的模拟是一个面板。就是这样。我需要将WPF的Content属性返回给WinForm。 – Luranis