【问题标题】:WPF Does Not Appear Within ElementHost in WinFormsWPF 不会出现在 WinForms 的 ElementHost 中
【发布时间】:2013-10-25 16:36:35
【问题描述】:

我正在构建一个 WinForms 应用程序并尝试在其中包含一个 WPF 应用程序。有问题的 WPF 是由 HighCore 编写的日志查看器,可以在这里找到:Implementing a log viewer with WPF
我遵循了this 教程,了解如何设置所有内容。需要注意的一点是,当我在 VS 中展开 ElementHost 的选项时,它不会在“选择托管内容”下拉列表中显示日志查看器。然而,日志查看器在我的项目中(我通过 Project 菜单创建它),所以我最终使用了这段代码:

public MainForm()
  {
     InitializeComponent();
     logViewer tslv = new logViewer();
     elementHost.Child = tslv;

     this.Controls.Add(elementHost1);
     elementHost.BringToFront();
  }

我添加了BringToFront(),因为我第一次运行代码时没有看到 WPF。现在,这就是发生的事情:

但是,我的 VS 设计器中的内容如下所示:

ElementHost 在一个 SplitContainer 中,它本身在一个 Panel 中(这是我在 VS 设计器图像中选择的)。
WPF 不觉得有必要被 ElementHost 的尺寸或位置所束缚(也许它是叛逆的)。例如,如果我将 ElementHost 的 Dock 属性设置为 Fill,WPF 会填充整个应用程序窗口,而不仅仅是 ElementHost 中的空间。

除了将 WPF 放在自己的窗口中或将 WinForms 应用程序移植到 WPF 之外,有没有人有任何建议?

【问题讨论】:

  • +1 提及我的解决方案 =)
  • @HighCore 我对 WPF 非常陌生,并且仍在努力了解您的解决方案。我不知道如何从我的主 WinForm 中填充 LogEntries(也没有足够的代表来评论你的答案!grr)。例如,我无法获得LogEntries(我也看过this)。也许您可以解释或编辑您的答案?或者也许它应该是它自己的问题。
  • 是的,您可能应该为此创建一个单独的问题。 LogEntries 是一个简单的 ObservableCollection,您应该将它与 WPF UI 分开(可能作为 ViewModel 的一部分)并从外部(winforms 或其他)操作 ViewModel。您几乎不需要在程序代码中操作 WPF UI。

标签: c# wpf winforms xaml visual-studio-2012


【解决方案1】:

删除这一行: this.Controls.Add(elementHost1);

您正在将 elementHost 读取到表单的子列表中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 2011-05-28
    相关资源
    最近更新 更多