【问题标题】:get WPF Window Context to Form获取 WPF 窗口上下文到窗体
【发布时间】:2017-10-16 13:52:26
【问题描述】:

我为更新表单创建了一个新项目并为其使用了 WinForms(我的主要项目使用 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 添加到我的 MainWindow:

<WindowsFormsHost>
    <wf:Form x:Name="form" />
</WindowsFormsHost>

并编辑 MainWindow.xaml.cs 如下:

public Form Context
{
   get { return form; }
}

但我遇到了 XamlParseException。

【问题讨论】:

  • 您的 MainWindow 是 System.Windows.Window,但您的属性 'Context' 的类型是 System.Windows.Forms.Form。它们是完全不同的类型,你想做什么?
  • 听起来您想在 WPF 应用程序中托管 Windows 窗体控件。尝试并按照本教程进行操作:docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/…
  • @mnistic 是的,很好。我需要什么 Context ?演练适用于 MaskedTextBox ^^
  • @Luranis 不确定您的意思?如果您需要更多帮助,则必须提供更多代码以帮助了解您在做什么。
  • 我想在我的主窗口中打开一个 WinForms 对话框。这就是为什么表单上下文应该得到“这个”。但后来我得到了错误。所以我需要填写“这个”。我在另一个项目中按如下方式打开 WinForms:if (new SharpUpdateAcceptForm(this.applicationInfo, update) .ShowDialog(this.applicationInfo.Context) == DialogResult.Yes) this.DownloadUpdate(update);

标签: c# wpf winforms


【解决方案1】:

WinForms 和 WPF 是不同的框架,都基于 Win32 API。从这个意义上说,对象 Form 和 Window 之间唯一的共同点是 HWND,即窗口的句柄。 理论上,如果两个窗口都知道彼此的 HWND,它们可以通过它们的消息队列进行通信 - Send(Post)Message(...),这可能不是您想要的。 最好的方法是坚持使用其中一个框架或将您的表单转换为控件并将其托管在 WindowsFormsHost 中。

【讨论】:

  • 你的意思是把我的表单转换成控件?我怎样才能给我的表格窗口(这个)?如果我的 MainWindow 是 WinForm,get { return this; } 就可以了。但它是一个 WPF 窗口,我需要相同的 (this)。我编辑了我的问题,所以你可以看到我尝试了什么。
  • 在 WPF 中,Window 类有一个属性 Content。在 XAML 中,您可以在 ... 标记内定义内容。例如,您可以通过创建具有窗口内容的 UserControl 将 WPF 窗口转换为控件。我在实践中没有使用过 WinForms,但你应该可以做同样的事情。 WinFoms 中的 UserControl 的比喻是什么?一个框架?
  • WinForms 中没有框架。框架的类似物是面板。就是这样。我需要将 WPF 中的 Content 属性返回给 WinForm。
猜你喜欢
  • 1970-01-01
  • 2012-05-31
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
相关资源
最近更新 更多