相关疑难解决方法(0)

带有ListBox的WPF ListBox - UI虚拟化和滚动

我的原型显示"文档",其中包含由缩略图图像表示的"页面".每个文档可以包含任意数量的页面.例如,可能有1000个文档,每个文档有5个页面,或者5个文档,每个文档有1000个页面,或者介于两者之间.文件不包含其他文件.在我的xaml标记中,我有一个ListBox,其ItemsTemplate 引用的innerItemsTemplate也有一个ListBox.我想要2级选定的项目,以便我可以对文档或页面执行各种操作(删除,合并,移动到新位置等).innerItemsTemplate ListBox使用a WrapPanel作为ItemsPanelTemplate.

对于我有大量文档的情况,每个文档都有几个页面(比如10000个文档,每个页面有5个页面),滚动工作非常好,这要归功于UI虚拟化VirtualizingStackPanel.但是,如果我有大量的页面,我会遇到问题.具有1000页的文档一次仅显示约50个(无论何种适合屏幕),当我向下滚动时,外部ListBox移动到下一个文档,跳过不可见的950页左右.除此之外,VirtualzingWrapPanel应用程序内存确实没有 增加.

我想知道我是否以正确的方式解决这个问题,特别是因为它有点难以解释!我希望能够显示10000个文档,每个文档1000页(仅显示适合屏幕的任何内容),使用UI虚拟化,以及平滑滚动.

如何在显示下一个文档之前确保滚动在文档中的所有页面中移动,并且仍然保持UI虚拟化?滚动条似乎只移动到下一个文档.

表示"文档"和"页面"似乎合乎逻辑 - 使用我当前ListBox在a 中使用a的方法ListBox

我非常感谢你的任何想法.谢谢.

wpf virtualization user-interface scroll listbox

26
推荐指数
4
解决办法
2万
查看次数

如何以编程方式滚动WPF列表视图?

是否可以以编程方式滚动WPF列表视图?我知道winforms不会这样做,对吧?

我说的是向上或向下滚动50个单位等.不要一次滚动整个项目高度.

.net c# wpf listview

17
推荐指数
2
解决办法
2万
查看次数

在WPF中使用ListBox,VirtualizingStackPanel和Smooth Scrolling

我有一个ListBox可能有很多行的模板化DB记录,包括一个Image,绑定到一个ObservableCollection<MyItem>.有时收藏可以容纳数千件物品.

性能很好,但滚动是默认的跳跃行为.我希望它有平滑的滚动,所以我取消选中ScrollViewer.CanContentScroll.

现在我有平滑的滚动,但性能很可怕:数据在一个单独的线程中检索,并且线程快速完成,但结果显示在中需要10-20秒ListBox.我假设这是因为取消选中ScrollViewer.CanContentScroll将底层更改VirtualizingStackPanel为常规StackPanel,因此在显示结果之前加载整个集合.

所以我的问题是:如何在不牺牲VirtualizingStackPanel行为和性能的情况下保持平滑滚动?

wpf performance scroll listbox virtualizingstackpanel

17
推荐指数
2
解决办法
2万
查看次数

当ViewingMode设置为滚动时,调整FlowDocumentReader的滚动增量?

我在FlowDocumentReader中使用ViewingMode ="Scroll"显示FlowDocument.如果我在鼠标上使用滚轮,则文档滚动速度非常慢.我想增加滚动步骤.

  1. 我试图在控制面板中更改鼠标的滚动设置,但这没有任何效果.我认为WPF忽略了FlowDocumentScrollViewer的设置.

  2. 我在FlowDocument和FlowDocumentReader上添加了一个Scroll事件,但是当我使用鼠标滚轮时,它不会触发.

  3. 我在FlowDocumentReader上添加了一个Loaded事件,得到了ScrollViewer后代,从滚动查看器的模板中找到了ScrollBar("PART_VerticalScrollBar")并调整了SmallChange和LargeChange属性.这也没有任何影响.

有人有主意吗?

c# wpf scroll

6
推荐指数
1
解决办法
1万
查看次数

Silverlight 3 - ListBox:如何实现Smooth Scroll并捕获MouseDown/MouseUp事件

我正在尝试根据我的需要调整ListBox的行为,我遇到了几个问题

1)如何以编程方式设置ListBox的滚动位置
ListBox不提供其内部ScrollViewer的访问器,因此您无法将其滚动到任何您想要的位置.

2)如何准确设置垂直滚动(即如何平滑滚动)?
默认情况下,无法通过一次滚动一个完整元素来滚动其他列表(列表框将始终确保第一个元素完全显示)

在大多数情况下这种行为是可以的,但不是我的:我想要一个平稳的运动...),

WPF有一个解决这个问题的方法,但Silverlight没有解决方案(请参阅问题"是否可能实现 - 在-wpf-listview中实现平滑滚动").

3)如何捕获MouseDown和MouseUp事件:
如果您继承ListBox,您可能能够捕获MouseUp和MouseMove事件.但是,MouseUp事件永远不会被触发(我怀疑它被ListBox子元素吃掉了)

silverlight listbox smooth-scrolling

6
推荐指数
1
解决办法
8097
查看次数

在wpf中的stackpanel内平滑滚动

<ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True">
                <StackPanel Name="basePanel" Orientation="Vertical" Height="450" />
            </ScrollViewer>
Run Code Online (Sandbox Code Playgroud)

这是stackpanel的代码,它在运行时用多个WrapPanel填充.滚动查看器滚动面板 - 一次一个 - 这使得它非常不方便,因为所有面板都有不同的尺寸.我想这一个在StackPanel中设置ScrollViewer.CanContentScroll ="假"的属性,而在ScrollViewer中删除,并没有帮助-滚动条消失的.平滑滚动条的解决方案是什么?

wpf scroll stackpanel

6
推荐指数
1
解决办法
5479
查看次数

滚动包含包含ListView的扩展器的ListView不起作用

我的情况是我的C#WPF应用程序包含一个ListView,其元素是Expanders.每个扩展器都包含一个带有ListViewItems的ListView.这是一张图片: 在此输入图像描述

在右侧,您可以看到滚动条.那个ScrollBar是我的问题.它有两个问题:

  1. 在扩展列表上使用MouseWheel时,ScrollBar不起作用.我指的是从"Controller"到"FullInstallation"的区域.如果将鼠标悬停在标题上("所有测试"),ScrollBar会滚动.我认为Expander中的ListView默认有一个ScrollBar,它"窃取"了MouseWheel事件.但是,我不知道该怎么办.

  2. ScrollBar滚动扩展器项目,而不是扩展器的内容.我的意思是,不可能向下滚动一点,而是总是向下滚动至少1个Expander项目.我希望滚动条滚动,以便可以看到例如"All Tests"Expander的一半.

该图显示了禁用的滚动条,但通过缩小窗口,滚动条将启用.

到目前为止我尝试了什么:

  1. 外部ListView外部的ScrollViewer:这解决了问题1,但这意味着MouseWheel根本不起作用!这是因为外部ListView生成了自己的ScrollViewer(使用Snoop来查找它),它"窃取"了MouseWheel事件.

  2. 将所有控件(ListView,Expander,ListViewItem)的所有MouseWheel事件重定向到ScrollViewer:我再次使用外部ListView外部的ScrollViewer,这次我使用MouseWheel事件为我的所有控件调用外部的MouseWheel事件ScrollViewer中.这确实有效,但是对于鼠标指针的某些位置它没有.例如,在两个ListViewItem之间有一个小的1毫米空间,其中没有捕获MouseWheel事件.或者在最后一个Expander("Short Tests")之后的底部.在那里,我没有得到任何事件.

我尝试了更多的东西,但没有进一步.有谁知道如何解决这个问题?

祝愿,基督徒

c# wpf listview

5
推荐指数
1
解决办法
2376
查看次数