问题标签 [elementhost]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
27860 浏览

wpf - WPF ListView 性能非常慢 - 为什么?(ElementHost,还是其他原因?)

我有一个 Windows 窗体应用程序,它有一个包含 WPF 用户控件的 ElementHost... 在我的 WPF 中,我有一个非常简单的 ListView:

如果我的来源有 10 个项目,则表单会在不到一秒的时间内加载。如果我的来源有 1000 个项目,则需要 7 秒!!!我的计时器只考虑加载(而不是获取物品需要多少时间)。

所以我的问题是:

使用 ElementHost 是一场性能噩梦吗?

WPF DataBinding 是性能噩梦吗?

ListView 是废话吗?(顺便说一句,与 WPFToolkit 的 DataGrid 的结果相同)?

0 投票
3 回答
7896 浏览

wpf - 从 WinForms 托管的 WPF 控件加载/使用资源字典

我有一个需要在运行时托管 WPF 控件的 Windows 窗体应用程序。我已经完成了基本的托管和交互(使用 ElementHost 控件)并且一切正常,直到我尝试做一些需要 WPF 控件来使用已定义的自定义资源字典的事情。(WPF 控件及其所有资源字典都定义在同一个 WPF 控件库 DLL 中。)

一旦发生这种情况,我就会收到一堆看起来像这样的错误:

我找到了一个参考资料链接由于归档而失效 可能是最初参考的同一篇文章)。这谈到了这一点,但似乎这篇文章更多地从 WPF 方面处理事情,但我真的不想对 WPF 控件进行更改,因为一切都在独立的 WPF 应用程序中工作。

如果实现这一点的唯一方法是在 WPF 端进行更改,我可以进行这些更改(我不负责 WPF 控件库,但也为同一家公司工作的人,所以这不是问题其他而不是让他有时间进行更改。)但我希望我可以在 WinForms 方面做一些事情来让它发挥作用。

WPF 控件库在项目中定义了一个名为“Default.xaml”的资源字典文件,具有以下属性:

构建操作:页面复制到输出目录:不要复制自定义工具:MSBuild:Compile

独立 WPF 应用程序的 App.xaml 文件中有以下条目:

看起来控制库应该已经知道如何获取它的资源。使用 Resources.MergedDictionaries.Add() 似乎应该可以工作,但是我在哪里可以获得现有字典的实例?

0 投票
3 回答
2238 浏览

wpf - 动态应用程序级资源在 ElementHost 中托管时不是动态的

我在 WinForms 容器中托管 WPF UserControl。现在,我希望能够为 UserControl 设置主题/皮肤。为此,我有几个定义“皮肤”的资源字典。当我的应用程序启动时,我创建了一个“新 System.Windows.Application()”,以便 Application.Current 存在。为了改变主题,旧皮肤被删除,新皮肤在运行时被合并到应用程序级资源字典中。但是,这不会更改 UserControl 中任何动态引用的资源。我在一个直接的 WPF 应用程序中尝试了这个,它工作得很好。我错过了什么,或者根本不可能做到这一点?顺便说一句,如果我在初始化 UserControl 之前将皮肤添加到应用程序资源中,它将起作用,但之后我无法更改皮肤。

以最基本的方式回购这个:

创建一个新的 WinForms 应用程序。将 WPF UserControl 添加到应用程序。这很简单:

创建两个 ResourceDictionaries,White.xaml 和 Black.xaml(或其他),它们具有 SolidColorBrush,键为 ButtonBG,具有各自的颜色。在 Form1.cs 中,添加两个 Button 和一个 ElementHost。将 ElementHost 的子级设置为我们刚刚创建的 UserControl 的一个实例。将按钮连接到交换皮肤的事件:

在 Program.cs 中,确保 Application.Current 存在并设置初始皮肤:

现在,当单击白色按钮时,我希望用户控件中的按钮变为白色,当单击黑色按钮时,我希望按钮变为黑色。然而,这不会发生。

有谁知道为什么?有解决办法吗?

编辑:想法:也许,如果有一种方法可以在主题更改时强制重新评估 DynamicResources,那将起作用。

谢谢,尘土飞扬

0 投票
4 回答
11619 浏览

wpf - WPF TextBox 在窗口窗体中的 ElementHost 中不接受输入

我们正在 WPF 中开发一个 UI 控件,以便在现有的 Windows 窗体/MFC 应用程序引擎 (Rhino 3D) 中使用。

应用程序引擎公开了创建“Dockbar”的能力,它实质上允许您将 Windows 窗体控件放在可以停靠到引擎界面的子窗口中。

我试图将一个简单的 WPF TextBox 放在 ElementHost 控件中,该控件已添加到 Dockbar 中。乍一看,这似乎工作正常;但在尝试输入文本框后,只有某些序列实际显示在文本框中。DELETEBACKSPACECOPYPASTE和SELECTING TEXT工作。如果您键入 AZ、1-9 等,则不会显示这些键。

我已经在网上搜索过,并且听说过,ElementHost.EnableModelessKeyboardInterop()但这仅适用于从表单创建的 WPF Windows。我只是创建 WPF 用户控件并将它们托管在 ElementHost 控件中。

我看到一篇关于 Dispatcher.Run() 的帖子,它有点工作,但打破了表格的其余部分:

PreviewKeyUpPreviewKeyDownKeyUpKeyDown事件都在 TextBox 上触发,但遗憾的是,TextBox 中没有显示任何文本。

我对 Windows 消息了解不多,但使用 WinSpector 我注意到没有 WM_GETTEXT 消息来自 TextBox(如果它们甚至应该是我不知道)。

我还创建了一个新的 Windows Forms 项目并在那里做了同样的事情,它工作正常,所以它必须是如何在 Rhino 3D 引擎中创建和停靠窗口的问题。

这是不起作用的示例代码:

0 投票
1 回答
3504 浏览

wpf - 与 ElementHost 对接

我正在尝试将 WPF 用户控件添加到现有的 WinForms 项目并让 WPF 用户控件停靠并填充整个空间。

当前有一个框架将 WinForms UserControls 加载到父窗体(到面板中)以响应按钮单击。这就是我试图加入的地方 - 当前正在加载的 WinForms UserControl 将具有 ElementHost。

等级制度:

  • Form1.cs - 包含一个动态加载 WinForms UserControls 的面板
    • WinForms UserControl - 包含 ElementHost
      • WPF 用户控件

ElementHost 将 Dock 设置为 Fill 并将其 Child 属性设置为 ucReport,这是一个 WPF 用户控件,具有以下标记(仅包括顶级设计):

当我调整表单大小时,UserControl 的内容确实会垂直扩展,但在水平方向上,内容只会扩展得足够大以容纳其内容。

当我在设计器中查看 WinForms UserControl(具有 ElementHost 的那个)时,问题很明显。指定的 WPF 内容正在呈现,并且从上到下填充,而不是从左到右填充。

我认为必须设置 XAML 中的某些内容(可能在 UserControl 声明中?)以使其填充它的父容器,即 ElementHost - 我只是找不到该属性。

有人会启发我吗?

0 投票
2 回答
1403 浏览

wpf - ElementHost 控件中的 WPF 验证

我有一个 WinForms 表单,其中包含一个 ElementHost 控件(其中包含一个 WPF 用户控件)和一个保存按钮。

在 WPF UserControl 中,我有一个带有一些验证的文本框。像这样的东西...

这一切都很好。但是,我想做的是在表单处于无效状态时禁用“保存”按钮。

任何帮助将不胜感激。

0 投票
3 回答
4179 浏览

wpf - WPF ShowDialog 和 ElementHost

是否可以从作为 ElementHost 的子元素的 WPF 用户控件显示模态窗口,并将模态窗口的所有者/父级设置为包含表单控件?

我猜你不能这样做,因为 Owner 属性需要一个 Window 的实例,我想将它设置为 Element Host 控件的父级,这是一个旧的 Windows Forms Form 控件。只是想知道是否有解决方法或替代方法。

问题是当显示模态窗口并且用户切换到另一个应用程序,然后再返回时,模态窗口被隐藏并且用户无法与主窗口交互。这是因为 Windows 认为模态窗口仍然显示,但实际上没有显示,因为没有设置所有者/父关系。

干杯,詹姆斯。

0 投票
2 回答
1774 浏览

wpf - WinForm ElementHost 中托管的 Prism 问题

我在 ElementHost 控件中托管 WPF prism 应用程序时遇到问题,迫切需要帮助。

PRISM 应用程序在 silverlight 和独立 WPF 中运行良好。

主 Shell 似乎在 WinForm 上的 elementHost 中设置得很好,但是其他视图只加载“RegisterViewWithRegion”而不是“Add,Activate”过程。我需要“添加,激活”来确定范围。但是我相信问题是我加载了我的 shell 两次……不是故意的。如果不调用两次“Resolve”,我找不到调用引导程序并设置 elementHot 的方法。

这是我的 WinForm 和引导程序的代码。再次使用“RegisterViewWithRegion”时一切正常。

这是 Winform 构造函数:

这是引导程序:

0 投票
1 回答
2155 浏览

c# - WPF - C#:此元素当前未与任何上下文关联

我有一个 WPF UserControl,我在 ElementHostControl 内的 WinForms 控件中使用它。然后我启动一个 WPF 窗口,而 Windows 窗体仍处于打开状态。如果我然后关闭 WPF 窗口,并尝试将子元素添加到我的 WPF 用户控件,它会在(子元素的)“InitializeComponent()”处崩溃,但以下情况除外:

“System.Configuration.dll 中发生了‘System.Configuration.ConfigurationErrorsException’类型的第一次机会异常。附加信息:此元素当前未与任何上下文相关联”

我发现它为什么会发生,但我不知道如何解决这个问题。如果我省略此代码:

那么一切都很好。不过我需要它,因为我的 ResourceDictionary(以及我定义的样式和模板)在整个 WPF 窗口和控件中不可用。这是我在这里发现的

有什么方法可以结合两全其美?保留我的 ResourceDictionary,同时防止应用程序崩溃?

0 投票
3 回答
4854 浏览

winforms - 使用 ElementHost 时加载 wpf 控件之前的黑色背景

我在带有 ElementHost 的 WinForms 中使用 WPF。当表单加载时,ElementHost 即将加载的地方会出现黑色背景。这看起来有点糟糕。关于如何摆脱这种情况的任何建议?