问题标签 [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.
wpf - Winforms - 最小化时应用程序卡住
就在最近,我正在使用 elementhost 在 Winforms 中使用 WPF 文本框。我加载了一个包含至少 100,000 + 个字符和超过 2,000 行的大型文本文件。它打开文件并将文本正常添加到 wpf 文本框,我可以轻松地滚动文本框。当我在加载此文档时最小化程序时,程序会卡住,有时至少需要 1 分钟或更长时间才能最大化。文档或程序打开文档的方式没有任何问题我只是不明白它有什么问题。如果是这样,可能是什么问题,任何人都能够解决这个问题。
我调试了程序并且没有调试错误只是我猜的性能但是当我最小化时它加载并打开正常。
打开文件的代码:
c# - Why am I getting "does not contain a definition for 'Map'" here?
I am trying to add a Bing Map WPF control to a Winforms app using the direction here like so:
(my user control is named BingMapHostUserControl). With thsi I get, "'DataMapper.BingMapHostUserControl' does not contain a definition for 'Map'
So I changed the code to this, referencing the elementHost:
...but get a similar err msg with that
What am I doing wrong?
UPDATE
Here is the XAML for the User Control:
And, from the Designer.cs file of the main form:
wpf - 在 WPF 应用程序中查找嵌入式控件
我有一个混合了 WPF 和 Windows 窗体的旧应用程序。本质上,通过将 ElementHost 添加到 Windows 窗体,将 WPF 应用程序加载到 Windows 窗体应用程序中。然后,此 WPF 应用程序将 WPF 用户控件加载到它上面。嵌入在此 WPF 用户控件中的是旧版 Windows 控件(自定义浏览器控件),它最终派生自 System.Windows.Forms
有没有办法从代码中动态获取该控件的句柄?我们不知道控件在呈现时的名称。我们所知道的是控件的基本类型,正如我提到的,它源自 System.WIndows.Forms。
到目前为止,我看到的所有示例都讨论了如何动态发现最终成为 DependencyObject 的子对象。我还没有遇到一个示例来解释如何在 WPF 应用程序中以编程方式发现旧式 Windows 窗体控件。
wpf - 托管 Winform 控件不响应来自 WPF 的事件
这是我在 StackOverflow 上的第一个问题。由于缺乏声誉,我无法发布任何链接或图片。我已经在以下问题上工作了超过 2 天。任何帮助将不胜感激。
在我提出问题之前,这是我所拥有的和我所期待的:
- 我有一个Windows 窗体,它在ElementHost控件 中托管WPF 。
- 然后,我有一个类似于 DateTimePicker的Winforms UserControl 。这
托管在WindowsFormsHost控件中。
由于以下原因,上述情况是不可避免的:
- 我们所有应用程序的授权对话框都是在 Winforms 中开发的,并以 Winforms 实例作为其参数。目前还没有引入 WPF 版本。因此,我不得不使用 ElementHost 在 Windows 窗体中托管我的视图。
- 我的 WPF 中托管的 Winforms 控件也是不可避免的。我们有自己的 DateTime Winforms UserControl,其行为类似于 DateTimePicker Winforms 控件,但涉及更多复杂性。所以,用 WPF 版本替换这个控件是没有问题的。
预期功能:
我有一个
WPF 控件(例如,文本框)
我在上面提到的 DateTime Winforms UserControl。
还有一个取消按钮,它基本上重置了上述控件。
当我点击 Cancel 按钮时,我将一个事件从ViewModel
RunViewModel发布到WPF UserControl代码隐藏文件,例如RunView.xaml.cs。
在文件后面的代码中,我订阅了该事件,如下所示
WPF控件重置为其默认值,但DateTime UserControl 不会重置。
因此,出于测试目的,我删除了 ElementHost 控件,并且只让我的 WPF 视图带有一个承载 DateTime Winforms UserControl 的 WindowsFormsHost 控件和一个 WPF“取消”按钮。
当我单击该按钮时,DateTime 控件上的值将重置为其默认值。
然后,我认为这可能是我的 DateTime Winforms UserControl 的问题。因此,我在实际应用程序中将DateTime Winforms UserControl 替换为Winforms Textbox 控件。所以现在嵌套如下:
WinForms-ElementHost-WPF-WindowsFormsHost-Winforms 文本框
这是xaml代码。
在初始加载时,我正在Textbox
加载Initial Load Text
文本
正如我上面提到的,当我点击取消按钮时,会发生以下情况:
从 ViewModel 发布事件
eventAggregator.GetEvent().Publish(true);
订阅代码隐藏文件 (xaml.cs) 中的事件:
eventAggregator.GetEvent().Subscribe(ResetDateTimeHandler);
已发布事件的 EventHandler。
private void ResetDateTimeHandler(bool cancelClicked) { ReportFromDateTime.Text = "重置为默认值"; }
正如您在上面的代码中看到的,我在单击取消按钮时重置文本。
在调试期间,我可以看到 Text 属性更改为“重置为默认值”,但 UI 没有显示这些更改。
这是奇怪的部分:
WindowsFormsHost 控件上的Child属性与实际的“ReportFromDateTime”文本框控件不同。
在调试时,我可以看到 WindowsFormsHost 控件上的 Child 和 Name 属性不同。Name 属性为空,
而应该是ReportFromDateTime。
似乎主机和子控件正在重新创建。
据我所知,我认为额外的嵌套级别(WinForms-ElementHost-WPF-WindowsFormsHost-Winforms Textbox)可能会在 WPF 和 Winforms 之间的互操作期间导致问题。
我做了很多研究并搜索了很多链接以获取建议。我发现没有人指出这个问题。他们中的一些人很接近。这里有几个链接:
这建议在“Surrogate Windows Forma Message Loop”部分下重现消息循环。
这是另一个链接,解释了嵌套部分下的嵌套问题。
我为冗长而道歉。只是想让你们清楚地了解我的问题。如果您对帖子有任何疑问,请告诉我。任何建议将不胜感激。
编辑:
我们能够解决这个问题,但它仍然是一种解决方法。这是我们所做的:有两种方法可以解决这个问题,但都与使用静态有关。
静态 Winforms 控件:
我们使用了以下静态 Winforms 控件
在“实际”控件的OnChanged事件中,我们将实际控件 ReportFromDateTime 转储到静态控件 ReportFromDateTimeInstance。
从那时起,无论我们在哪里更新实际控件(如在ResetDateTimeHandler
方法中),我们都会更新静态控件
这显示了前端的更新值
静态事件聚合器
这个解决方法是由我们的一位同事提供的。
在这种情况下,我们使用的是实际控件ReportFromDateTime,而不是静态控件,ControlHolder.ReportFromDateTimeInstance
我们使用静态事件聚合器来发布/订阅 ResetDateTimeEvent,而不是使用 Unity Container 提供的事件聚合器实例。所以,而不是
我们用了:
在订阅中:
我知道在这种情况下我们不需要使用静态事件聚合器,因为我们使用的是 Unity Container 提供的实例(确保所有 ViewModel 共享一个实例),但这也解决了这个问题。
所以,我仍然对为什么上述两种情况正在解决问题感到困惑。是解决问题的静态性吗?
正如我已经说过的,我觉得控件正在重新创建,当我们掌握控件时,它们已经重新创建了。
任何建议将不胜感激。
vb.net - 我怎样才能使 ElementHost 的媒体不会被重新调整到中间?
我在 Visual Studio 中使用 ElementHost 制作了一个媒体播放器,但是当我开始时,媒体的大小被调整到中间,我该如何解决这个问题?
.net - .NET Ribbon Dropdown - 不能专注于子窗体?
我正在使用带有 winforms 的 .NET 4.5。我使用 ElementHost 是为了在我的应用程序中使用 XAML,其中唯一的 XAML 部分是功能区。我的应用程序有一个父 winform,托管多个子 winform。
当我单击应用程序中的任何子表单时,表单会按预期聚焦(GotFocus 事件处理程序)。但是,当我单击功能区上的任何下拉菜单时,子表单不再触发 GotFocus 处理程序,即使我仍然可以使用鼠标拖动表单。此外,当我单击功能区中未下拉的常规按钮时,子窗体将按预期激活 GotFocus 处理程序。
这是功能区中的示例下拉代码。如果我单击触发下拉菜单的主按钮,我将无法再触发任何子窗体上的 GotFocus 处理程序。
我可能发现了一个错误吗?
c# - WPF TabControl 边框无法在 MMC 管理单元中正确呈现
我在作为 MMC 管理单元一部分的 Windows 窗体内托管 WPF TabControl。在 Windows 8.1 上一切正常:
但我在 Windows Server 2012 R2 中有一个问题:
从上面,你可以看到它增加了我的 TabControl 的边框。此外,我注意到我的其他一些 WPF 选项卡项中的其他问题(例如列表视图项垂直对齐到顶部而不是中心以及类似的东西)。但现在,让我们解决双厚边框问题。为什么会发生这种情况,我该如何解决?我已经尝试谷歌几个小时来解决这个问题,但我似乎找不到任何好的解决方法或修复。另请注意,在 Inbound 文本下,您也可以在此处看到边框。这不是很奇特吗?
为了在 Windows 窗体中托管 WPF 控件,我将ElementHost
对话框的对象部分的子控件设置为 WPF 控件:
在我的 WPF 控件中,我没有做任何特别或不寻常的事情。我在 XAML 中创建我的选项卡控件:
然后我在构造函数中为我的 WPF 控件设置选项卡项:
编辑:当我在 TabControl ( <TabControl Margin="10 10 10 0" BorderThickness="0">
) 上设置 0 厚度时,它看起来如下:
因此,可以肯定的是,放大的边框是作为 Windows Server 2012 R2 中控件的一部分以这种方式呈现的TabControl
,但这是为什么呢?为什么它们会放大,我该如何解决?
将 BorderThickness 设置为 1 显式解决了放大边框的问题,但不能修复标题模板本身有一个底部边框或标题的底部底部边框是两倍大小的问题,所以我认为我需要启动 Blend 和编辑这些模板手动删除底部边框,这完全是疯狂的。为什么在 Server 2012 上会发生这种情况?
wpf - 打开 SaveFileDialog 时,使用 ElementHost 在 Winforms 中托管的 WPF 弹出窗口被冻结
我在用户控件中有以下代码。
Popup 上的自定义键盘在 WPF 应用程序中正常工作。
但是,当使用ElementHost在winforms中托管相同的用户控件并在此上下文中打开SaveFileDialog时, Popup 不会获得焦点。
现在我在弹出窗口上有一个键盘,在这种情况下它有点过时了。
有什么建议/想法/黑客可以将注意力集中在弹出窗口上吗?或者是否有可能在 Winforms 中实现这一点?
c# - 如何使用 KeyPresses 在没有窗口的 ElementHost 中托管 WPF 用户控件
通过将Child属性设置为自定义用户控件,我使用ElementHost在 Windows 应用程序中嵌入了 WPF 用户控件。
不幸的是,我的文本框没有收到任何按键输入,所以我根本无法使用我的加载项。
当我找到以下代码行时,我以为我找到了解决方法。
这不起作用,因为我没有使用窗口。事实上,没有办法在元素宿主中托管一个 System.Windows.Window 或将窗口用作宿主。
这个插件在开发过程中没有任何文本输入功能,所以它已经完全停止了。
如何让我的文本框接受输入?
wpf - ElementHost 阻止鼠标事件
注意:我正在尝试解决鼠标问题,而不是已经解决的键盘问题
所以我正在创建一个 Visual Studio 2015 扩展,在选项页面上工作。
我正在使用 WPF,所以我使用 ElementHost 来托管 UserControl。起初它没有收到键盘事件,所以我在以下位置实现了解决方案:
WPF TextBox 在窗口窗体中的 ElementHost 中不接受输入
解决方案的快速运行:
A) 在 UserControl 的 Loaded 事件中,我这样做:
B)在 ChildHwndSourceHook() 中,我执行以下操作:
但是,现在鼠标悬停事件似乎被忽略了,因为光标在文本框或网格拆分器上移动时不会改变,甚至在我创建的新 Windows 上也不会改变。 但是,偶尔,鼠标事件确实有效,并且会继续有效,直到我移动到另一个页面或关闭对话框。这是最奇怪的部分。
我已经尝试了所有方法并整天搜索谷歌,但我并没有更接近理解为什么点击工作正常,但鼠标悬停事件似乎没有被注册。
我确实尝试过删除消息处理程序,然后打开一个窗口,但似乎一旦添加了处理程序,删除它就不会解决任何问题。
有谁知道我怎样才能让鼠标悬停在我的控件上工作?非常感谢!