问题标签 [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.
.net - 使用 ElementHost 在 Winform 应用程序中托管 WPF UserControl 有什么缺点吗?
好奇使用ElementHost在 Winform 应用程序中托管 WPF UserControl是否有任何缺点?
我问是因为总的来说,我觉得创建一个新的 WPF 应用程序需要很长时间,它的基本界面看起来不错。从某种意义上说,如果我创建一个新的 Winforms 应用程序并在其上添加一些控件,我最终会得到一个基本界面,该界面的外观和行为类似于许多其他应用程序,但看起来并不简单。如果我对 WPF 应用程序做同样的事情,我觉得我不会获得相同的结果,我最终会得到一个带有白色背景的“普通”应用程序,除非我将角色更改为设计师并花费额外的时间让它看起来很确定方法。
然而,在某些情况下,WPF 对我来说是可取的,因为它相对容易创建一个风格化的界面。考虑一个视频播放器控件;在 WPF 中,我可以创建一些看起来非常漂亮和自定义的东西,但比 Winforms 控件花费的时间和精力要少得多。在这些情况下,使用 WPF 对我来说是有意义的,因为我最终花费的时间比我覆盖 OnPaint 的时间要少:-)。
我意识到我使用了很多主观术语,但这是我对原始问题的推理。
更新:
只是为了澄清我的“视频播放器控制”示例。WPF 不仅让我MediaElement
可以玩,而且如果我想说,在视频暂停时覆盖一个播放按钮,或者如果我想要一个半透明的“播放/暂停/停止/音量”栏显示什么时候将鼠标放在某个位置,WPF 比任何 Winforms 替代方案都简单得多。
编辑:
也许我的配置选项错误或其他什么,但当我查看 WPF 与 Winforms 控件时,“描述”部分消失也令人沮丧。更令人沮丧的是,在 WPF 属性表单中按 F1 不会将您带到您所在的特定属性/事件。
更新:
还有谁?我更关心在ElementHost中托管 WPF UserControl 会带来的性能影响和/或功能限制。到目前为止,这听起来像是运行时的一次性开销,但仅此而已吗?
wpf - 如何使用 Windows 窗体嵌入资源作为 WPF 媒体元素的源?
我在 WinForms 应用程序中托管一个 MediaElement,我想通过它播放图像和视频。我的图像和视频被设置为应用程序的嵌入式资源。
MediaElement.Source 属性仅接受 URI。
关于如何让 MediaElement 播放嵌入式资源文件而不将它们写入磁盘的任何想法?
谢谢。
vb.net - WPF 用户控件导致内存不足异常
寻找免费的拼写检查解决方案,我认为我这样做很聪明,但我想不是。
我已经创建了一个基于 Windows 表单的应用程序,并且我希望表单将用户指定数量的用户控件(带有文本框)添加到面板上。然后用户可以单击某个按钮,此面板上的控件将被清除并添加新控件。用户做某事并重复该过程。现在,我希望这些文本框支持拼写检查,并到处寻找免费的解决方案。
WPF 文本框支持拼写检查,而常规 win 表单中的文本框不支持。我想我可以通过将这些 WPF 文本框添加到 ElementHost 对象来使用它们,该对象又位于面板中。该面板将是一个用户控件。
因此,在我的应用程序中,我将能够将这些用户控件的实例添加到表单中,并利用 .NET 的拼写检查优势。这实际上有效,但是在使用该应用程序一段时间后,发现该应用程序最终会由于内存不足错误而冻结在我身上。我已经确定了这些 WPF 控件的内存错误,因为普通文本框不会发生此问题。
当窗口打开并指定控件的数量时,这几乎就是添加控件的方式:
注意:
- myPanel 是表单上的面板
- SpecialUserControl 是带有 WPF 文本框的用户控件(在 ElementHost 对象中)
当用户按下按钮时,面板被清除:
然后用户可以重复该过程。
当我试图找到解决方案时,互联网上有很多结果,我认为我遇到的问题是由于 WPF 控件即使在清除面板后也不会消失。根据这个结论,我尝试了不同的解决方案来处理这些控件或将它们设置为空,但内存问题不断发生。如果有人可以在这里给我一些建议或想法,我将非常感激。
c# - Debugger Visualizer、ElementHost 和 Edit and Continue 问题
我最近为我的应用程序中的一种自定义类型编写了一个用于 Visual Studio 2008 的自定义调试器可视化工具。可视化工具的 UI 是用 WPF 编写的,托管在元素宿主中,并使用 IDialogVisualizerService windowService 对象显示。
一切正常,我的可视化工具会加载并显示相关信息,但如果在加载可视化工具后尝试在我的应用程序中“编辑并继续”,Visual Studio 会崩溃且没有有用的错误消息。
在尝试调试时,我从解决方案中删除了几乎所有代码,直到我只用 ObjectSource 序列化一个字符串并只显示一个空元素主机,我仍然在编辑和继续时遇到崩溃。如果我删除元素宿主并显示 WinForms 控件或表单,则不会发生崩溃。
这是可视化工具代码:
有任何想法吗?
c# - 在 WinForms 中绑定到 WPF 托管控件的 DependencyProperty
我有一个 WinForms 应用程序,其中包含一些托管 WPF 用户控件(使用 ElementHost)的元素。
我希望能够将我的 WinForm 控件属性 ( Button.Enabled
) 绑定到托管 WPF 用户控件 ( SearchResults.IsAccountSelected
) 的自定义 DependencyProperty。
是否可以将 System.Windows.Forms.Binding 绑定到由 DependencyProperty 管理的属性?
此外,由于我知道 System.Windows.Forms.Binding 监视INotifyPropertyChanged.PropertyChanged
事件 - 由 DependencyProperty 支持的属性会自动触发这些事件,还是我必须手动实现和管理 PropertyChanged 事件的发送?
wpf - 如何将 WPF 大小转换为物理像素?
将 WPF(与分辨率无关)宽度和高度转换为物理屏幕像素的最佳方法是什么?
我在 WinForms 表单(通过 ElementHost)中显示 WPF 内容,并尝试制定一些大小调整逻辑。当操作系统以默认的 96 dpi 运行时,我可以正常工作。但是,当操作系统设置为 120 dpi 或其他分辨率时,它将不起作用,因为就 WinForms 而言,报告其宽度为 96 的 WPF 元素实际上将是 120 像素宽。
我在 System.Windows.SystemParameters 上找不到任何“每英寸像素数”设置。我确定我可以使用等效的 WinForms (System.Windows.Forms.SystemInformation),但是有没有更好的方法来做到这一点(阅读:使用 WPF API 的方法,而不是使用 WinForms API 并手动进行数学运算)?将WPF“像素”转换为真实屏幕像素的“最佳方法”是什么?
编辑:我也希望在屏幕上显示 WPF 控件之前执行此操作。看起来可以让 Visual.PointToScreen 给我正确的答案,但我不能使用它,因为控件还没有父级,并且我得到 InvalidOperationException“此 Visual 未连接到 PresentationSource”。
c# - 在 Visual Studio C# 2008 中找不到 WPF 用户控件;而是坚持不存在的控制
这是一个相当不寻常的问题,但问题是:
我有一个在 Visual Studio C# 2008 中创建的 WPF 控件,map.xaml,在项目 Remote 中创建。
我想使用 ElementHost 工具将它添加到 Windows 窗体中,也在 Remote 中。很简单,对吧?
我创建了 ElementHost,然后选择了 HostedContent,但唯一可用的选择是 UserControl1.xaml,这是我之前在 Remote 中测试时创建的文件。然而,这个文件在我完成后被完全删除。我已经搜索了我的整个系统和项目,但找不到对它的引用。
如果有人对为什么会发生这种情况有任何想法,我将不胜感激;我只想添加 map.xaml,但 VS 拒绝识别除此 ghost 文件之外的任何内容。
谢谢,
米
multithreading - ElementHost 给我“调用线程必须是 STA,因为许多 UI 组件都需要这个。”
我刚刚在 Windows 窗体中添加了一个 ElementHost(窗体中还有其他一些 c# 代码)。然后它给了我错误“调用线程必须是 STA,因为许多 UI 组件都需要这个。” 我将线程更改为 STA,但它阻止了其他事情……有没有办法让 elementhost 工作而不接触任何其他代码?
这是我如何更改线程的代码:
.net - WPF 控件未显示在 WinForms 应用程序的 ElementHost 中
我尝试在 WinForms 应用程序的 ElementHost 中托管的 WPF 控件存在问题。该控件是我最初在一个单独的测试项目(一个 WPF 应用程序)中开发的无外观自定义控件。在那里它显然工作正常,但在我的 WinForms 应用程序中,我得到的只是一个显示 ElementHost 的空白灰色框。
这是我用于创建、填充 ElementHost 并将其添加到父控件的 C# 代码:
父控件包含在运行时根据需要添加和删除的其他 WinForms 控件。这些都是单独托管的,它们的 Dock 设置为 DockStyle.Fill。因此,每次添加一个元素时,我都会将 ElementHost 发送到 Z 顺序的后面,以确保它正确呈现:
因此,我知道我没有遇到空域问题或类似问题。
我确实想知道的一件事是:在原始项目中,我所有的外观控件的样式都合并到 App.xaml 中应用程序的资源字典中,如下所示:
我已将 App.xaml 迁移到我的 WinForms 项目,但构建操作设置为 Page。如果我将它设置为 ApplicationDefinition 我会收到一条错误消息,指出该应用程序有多个入口点,这是有道理的,但我想知道是否正在选择样式等。如果不是,这可以解释为什么我的控件应该是一个空白的灰色矩形,因为没有这些,就没有任何东西可以定义它的外观。所以也许问题是,我如何将这些样式添加到我的 WinForms 应用程序中,以便我的 WPF 控件可以看到它们?
我可能还应该提到这是在 .NET Fx 3.5 上运行的。
无论如何,现在我很困惑,所以任何帮助都将不胜感激。
非常感谢!
巴特
wpf - 文本在 WPF 窗口和 ElementHost 内呈现不同
我使用 WPF 互操作性在 WinForms 表单中托管 WPF 用户控件。一切正常,除了丑陋的文本渲染:
-- 这是 WPF 窗口上的简单标签:
WPF 窗口 http://img525.imageshack.us/img525/7049/wpfwindow.png
-- 以及当 WPF 用户控件托管在 WinForms 中时显示的相同标签:
互操作变体完全不同:字符间间隔为零,文本看起来比纯 WPF 变体更粗。当普通文本可以接受时,粗体文本很难看。
有什么想法可以解决吗?
先感谢您!