Tag: wpf

ElementHost大小导致wpf打开/加载速度慢,内存使用率高

问题: 我们有一个Winforms应用程序,可以打开另一个WPF窗口。 此窗口包含各种图标和文本,并不过分复杂。 回到主窗口,winforms one,这也有一个使用ElementHost嵌入的WPF控件(ElementHost专门设计用于使Winforms能够托管WPF控件)。 但是,我们注意到,一旦此应用程序的内存使用率变得非常高,第二个WPF窗口可能需要相当长的时间才能打开。 我们在VS2012中做了一个小型测试应用程序,可以复制问题。 测试应用程序打开一个Winforms窗口,其中有两个按钮; “添加4GB内存使用”和“打开WPF窗口”。 WPF窗口上有一个小图标(48 * 48),就是这样。 当我们添加4Gb内存使用并尝试第一次打开窗口时,打开窗口大约需要7秒钟。 代码:我已经通过BitBucket公开了测试应用程序和源代码。 我们发现的事情: 该应用程序肯定以64位运行,因为它将以32位方式抛出OutOfMemoryExceptions。 没有内存使用,窗口立即打开。 使用内存时,窗口在第一次打开时才会很慢。 如果WPF窗口没有图像,则会立即打开。 减小winforms控件上的elementhost的大小,比如1 * 1,窗口立即打开。 显然这不是一个很好的解决方案,因为它没有显示我们的大小这样的WPF控件。 我们的应用程序中的ElementHost大小约为1000 * 700,但我们注意到在减少ElementHost大小时有一个很大的下降点,因此需要10秒,直到它达到350 * 350左右,此时突然改善再快。 这可能取决于计算机,也可能是某种限制。 从wpf窗口中删除图像将使其再次快速。 添加新图像作为资源,并在WPF窗口上,线性地减慢打开时间(例如,1图像= 7秒,2图像= 14秒)。 通过确保图像与显示的大小相同进行实验,因此不应该resize,但这似乎没有任何区别。 用不同的图像类型进行实验,.png,.tiff,.ico但它们似乎都很慢。 有没有其他人遇到过这个问题/关于我们下一步可能是什么的任何建议?

使用复杂的GUI编写跨平台应用程序

我想开发一个具有复杂GUI的应用程序(带动画的combobox,带样条的图表,透明层……)。 我对C#2.0有很好的经验,而且我正在学习WPF,但我读到了,遗憾的是,没有计划将WPF移植到Mono。 如果我坚持使用C#并使用OpenGL(通过OpenTK )创建自定义GUI控件,我觉得这将是一项艰苦的工作(与GTK集成,调试,难以用于设计表单)。 我可以使用Java(使用JOGL) ,但我不熟悉它,而且我不了解性能问题。 最后一个选项是C ++ ,但我必须做一个大的修订 (自上次使用它以来的几年),我发现很难用C ++开发GUI和便携式应用程序。 (也许我错了!不过,我很害怕用这种语言开发这么复杂的应用程序。) 你有什么建议吗? 我最好选择C#+ OpenTK,Java + JOGL还是返回C ++?

WPF TextFormatter中第二行的缩进

我正在使用TextFormatter制作WPF文本编辑器。 我需要在每个段落中缩进第二行。 第二行中的缩进宽度应该类似于第一行上第一个单词的宽度,包括第一个单词后面的空格。 像这样的东西: Indent of second line in Indentation Inde second line in Indentation Indenta of second line in Indentation of second l ine in Indentation of second line in Inde ntation of second line in 第二件事:段落的最后一行应该在中心。 如何实现这一目标? 提前致谢!!

C#:从Windows桌面应用程序打开浏览器并POST到URL

我有一个小型的WPF应用程序(虽然我认为无论是wpf表单还是webform应用程序并不重要?)我想要启动一个新的浏览器窗口并POST到特定的URL。 我一直在搞乱: System.Diagnostics.Process.Start(“http://myurl.com”); 启动窗口,但我不认为我可以使用相同的过程实际发布到url…我也尝试过HttpWebRequest,但我希望用户能够在我发布到之后使用该应用程序这个url,不只是向他们展示结果……我能看到什么才能做到这样的事情?

当绑定属性强制执行某些业务规则时,绑定的WPF TextBox不会更新值

我使用的是.NET 4.0。 我有一些非常简单的代码,允许用户输入1到99,999(含)之间的数字。 我在Property setter中有一些逻辑,如果它不遵守业务规则(例如,它不是数字或数字太大),则会阻止应用最新值。 public class MainViewModel : INotifyPropertyChanged { #region Fields private string _text = string.Empty; #endregion // Fields #region Properties public string Text { get { return _text; } set { if (_text == value) return; if (IsValidRange(value)) { _text = value; } OnPropertyChanged(“Text”); } } #endregion // Properties #region Private Methods […]

WPF FlowDocument – 绝对字符位置

我有一个WPF RichTextBox,我正在键入一些文本,然后解析整个文本进行处理。 在这个解析过程中,我有每个单词开头和结尾的绝对字符位置。 我想使用这些字符位置将格式应用于某些单词。 但是,我发现FlowDocument使用TextPointer实例来标记文档中的位置。 我发现我可以通过使用开始和结束指针构造TextRange来创建它。 一旦我有TextRange,我可以轻松地将格式应用于其中的文本。 我一直在使用GetPositionAtOffset为我的角色偏移量获取TextPointer,但怀疑它的偏移量与我的不同,因为所选文本的位置与我的预期略有不同。 我的问题是,如何准确地将绝对字符位置转换为TextPointer?

如何在WPF中设置DataGrid标头的样式

我有一个像这样的DataGrid : 我如何将DataGrid Header集中DataGrid Header ? 并适用它的风格? 谢谢 编辑1): 写完这段代码后: 网格列成为: 为什么?

滚动时出现wpf datagrid单元格样式的问题

我为我的wpf datagrid(红色边框画笔)创建了一个新的DataGridCell样式。 当我垂直向下滚动时,所选单元格会消失,这是可以的。 当我向上滚动时,我看到所选的单元格,但很少有人错过了它们的样式,它出现在错误的单元格中。 它看起来像数据网格记住选定的单元格,但“忘记”他们的风格。 任何的想法? 哈伊姆

使用WPF WebBrowser显示内容来阻止滚动条

我正在使用WPF WebBrowser组件来显示一些非常简单的HTML内容。 但是,由于我事先并不知道内容大小,因此当我加载某些数据集时,我正在获取控件上的滚动条。 基本上,我如何强制(或以其他方式影响相当于强制)WebBrowser扩展大小,以便显示所有内容而不需要滚动条?

如何在WPF应用程序中放置自定义Windows窗体控件?

作为一个短期解决方案,我试图将Windows窗体’usercontrol’堵塞到WPF应用程序中。 我在WPF应用程序视图中看到我可以向项目添加“自定义窗体控件”,它会创建一个空的自定义控件,但我无法弄清楚如何添加它。 理想情况下,我想知道如何从我编译的Windows窗体用户控件中获取.dll并将其粘贴到WPF应用程序中,或将用户控件导入WPF应用程序。 谢谢,山姆