Tag: wpf

WPF的ICollectionView.filter包含大量数据

我正在开发一个wpf应用程序,其中包含一个包含大量数据(10 000到100 000)行的列表视图。 用户可以将各种filter应用于此列表视图,使filter逻辑非常先进(并且速度慢)。 目前,我的代码的相关部分如下所示: ICollectionView view = CollectionViewSource.GetDefaultView(hugeList.ItemsSource); view.Filter = new Predicate(FilterCallback); private bool FilterCallback(object item) { //Filter logic } 但是这会在UI线程中运行并在过滤时阻止整个应用程序,这会给用户带来非常糟糕的体验。 所以我的问题是:有没有人知道在wpf中过滤listview的“更好”方法,还是应该过滤底层的ObservableCollection ?

RenderTargetBitmap和Viewport3D – 质量问题

我想将一个3D场景从Viewport3D导出到位图。 显而易见的方法是使用RenderTargetBitmap – 但是当我这样做时,导出的位图的质量明显低于屏幕上的图像。 环顾四周,似乎RenderTargetBitmap没有利用硬件渲染。 这意味着渲染在第0层完成。 这意味着没有mip-mapping等,因此降低了导出图像的质量。 有谁知道如何以屏幕质量导出Viewport3D的位图? 澄清 虽然下面给出的示例没有显示这一点,但我最终需要将Viewport3D的位图导出到文件中。 据我所知,唯一的方法是将图像转换为从BitmapSource派生的东西。 下面的Cplotts显示使用RenderTargetBitmap提高导出质量可以改善图像,但由于渲染仍然在软件中完成,因此速度极慢。 有没有办法使用硬件渲染将渲染的3D场景导出到文件? 当然应该可以吗? 你可以看到这个xaml的问题: RenderTargetBitmap! 这段代码: private void Button_Click(object sender, RoutedEventArgs e) { RenderTargetBitmap bmp = new RenderTargetBitmap((int)viewport3D.ActualWidth, (int)viewport3D.ActualHeight, 96, 96, PixelFormats.Default); bmp.Render(viewport3D); rtbImage.Source = bmp; viewport3D.Visibility = Visibility.Collapsed; rtbImage.Visibility = Visibility.Visible; }

WPF数据绑定stackpanel

我是WPF编程的初学者,来自.NET 2.0 C#。 我试图创建一个水平StackPanel ,它应该填充数据库中的表中的数据。 问题是我希望它显示带有下表中某些文本的图像,然后水平堆叠这两个项目。 这里有一些伪代码来显示我想要做的事情: 我根本无法想象如何做到这一点。

如何传播WPF数据绑定期间发生的错误和exception?

我经常发现我在应用程序中意外破坏了数据绑定。 通过重命名属性而不是在XAML中重命名属性,或者由于某种原因抛出exception的属性。 默认情况下,数据绑定错误会记录到调试输出中,并且会捕获并抑制抛出的exception。 是否有一种简单的方法可以在记录调试输出后抛出exception? 我想尽快知道数据绑定是否被破坏(理想情况下是在自动化测试中捡起),并且没有冒险在人类测试之前可能会被忽视的可能性。

INotifyPropertyChanged与DependencyProperty

我需要观察属性的变化。 在性能和内存使用方面哪种方法更好:实现INotifyPropertyChanged或使用DependencyProperty ? 注意:是的,我在ViewModel中已经阅读了另一个问题INotifyPropertyChanged与DependencyProperty 。

WPF和C#中的Facebook OAuth示例

我正在开发一个WPF应用程序,要求我使用oAuth从Facebook获取访问令牌。 经过多次在线搜索,我得出以下结论: OAuth必须在浏览器中完成 我需要在该浏览器中查看URLpost,因此它必须位于WebBrowser WPF控件中 我决定创建一个用于进行Facebook身份validation的modal dialog,我可以使用访问令牌而忽略其余部分。 我想继续使用MVVM模型,但它比我预期的要困难。 关于如何做到这一点的任何想法都会非常有帮助 以下是我实现的一些function Cookie删除因此可以让另一个用户进行身份validation,而无需将当前用户注销 禁用新帐户创建,因为它导致了奇怪的UI体验 从Facebook生成的javascript中收听取消按钮 WPF窗口 WPF非常简单。 从本质上讲,它只是一个WebBrowser控件,其中包含Navigated和Navigating事件。 代码 //The Application ID from Facebook public string AppID {get; set; } //The access token retrieved from facebook’s authentication public string AccessToken {get; set; } public FacebookAuthenticationWindow() { InitializeComponent(); this.Loaded += (object sender, RoutedEventArgs e) => { //Add the […]

如何在Treeview C#WPF中插入子项

我想在之前添加的TreeViewItem中添加子项。 像这样的代码的问题: 如何在WPF中的TreeView控件中插入子节点? 或者我尝试使用的许多其他变体,如: for (int i = 1; i <= dataTreeview.Items.Count; i++) { TreeViewItem tempTVI = (TreeViewItem)dataTreeview.Items.GetItemAt(i); } 是我得到一个InvalidCastExceptionexception,因为项目(在另一个stackoverflow问题中)或tempTVI是字符串而不是TreeViewItem 我不知道为什么会这样,我没有想法。 如果它有助于我在预览中使用Visual Studio 2015社区。 谢谢您的帮助。

如何在WPF中启动说明Master-Detail(复合列表)对象数据绑定的最简单代码?

我试图运行(在C#4.0,Visual Studio 2010中)代码 无法使用ItemsControl和StackPanel将List显示为我的视图的一列? 已经在VS2010 WPF应用程序项目的MainWindow.xaml.cs中添加了myOrders的实例化但是我正在进入XAML 由于未知的数据上下文,无法解析符号’ myOrders ‘ 在MainWindows.xaml中指向myOrders上的鼠标: ItemsSource=”{Binding myOrders}” 在这种情况下,启动WPF应用程序的完整XAML脚本是什么? 更新: 我删除了我的代码,因为提供答案和评论是多余的。 请注意,我对最简单的启动插图 – 数据绑定的实现感兴趣: 复合(分层或多维/锯齿状数组或列表)List 对象(在C#中实例化但在XAML中不实例化) 模仿Master-Detail关系,TreeView 这是我在互联网上找不到的。 我可以发现,教程,演练或示例中的代码要么不会因为混淆模糊概念和理解而编译或过度膨胀。 即我更喜欢使用更简单的代码消失的答案 ,尽管我不能将其投票或标记为正确,因为它不是我的。

使用WPF绘制数千个数据点的最佳方式?

我写了一个显示财务数据的图表。 当我使用PathGeometry以及PathFigure和LineSegment绘制不到10.000个点作为连接线时,性能很好。 但是现在我需要同时显示多达100.000点(没有滚动)并且已经非常慢,只有50.000点。 我在考虑StreamGeometry ,但我不确定,因为它与PathGeometry基本相同,它将信息作为字节流进行处理。 有没有人有想法让这更高效,或者有人甚至做过类似的事情? 编辑:这些数据点一旦绘制就不会改变,所以如果有潜在的优化,请告诉我(线段现在被冻结)。 编辑:我试过StreamGeometry。 由于某些原因,创建图形的时间更长,但这不是问题。 绘制所有点后在图表上绘制仍然与前一个方法一样慢。 我认为WPF处理的数据点太多了。 编辑:我已经进行了一些实验,我注意到通过将先前为double的坐标转换为int来改善性能,以防止WPF抗锯齿子像素线。 编辑:感谢所有建议减少线段数的回复。 对于阶梯线,我将它们降低到最多两倍的水平分辨率,对于简单的线条,最多将它们降低到水平分辨率,现在性能非常好。

从byte 显示图像

我用C#,wpf。 我有一个图像,它以以下forms存储: byte [] public interface IFile { int Id { get; set; } byte[] FileData { get; set; } string FileName { get; set; } int? FileSize { get; set; } string FileExtension { get; set; } } 如何在表单上显示我的图像(FileData byte [] )? 如果我从byte []创建临时文件,我必须在Source=”…”写入?