从列表框的ScrollInfo获取有效值

汉克

我有一个ListBox,我面临的问题是试图从IScrollInfo对象中获取有效值

通过将ListBox上的MaxHeight设置为150,我知道ViewportHeight应该在这个大小左右,并且全高是它的两倍,因此ExtentHeight应该是300。

我从中获得以下值:
_scrollInfo.ExtentHeight = 13
_scrollInfo.ViewportHeight = 7
_scrollInfo.VerticalOffset = varying but 1-6

来自:的值
UIElement scrollable = _scrollInfo as UIElement;
似乎是正确的。
scrollable.RenderSize.Height = 146这大致是正确的。

我想知道的是:

当我的ListBox控件第一次加载时,它绑定到一个空ObservableCollection直到后来才添加项目。可能是IScrollInfo对象保留了ListBox为空时的这些初始值吗?

IScrollInfo对象的另一件事是,这VirtualizingStackPanel可能与此事有关吗?

[EDIT]
尝试将更VirtualizingStackPanel改为StackPanel,但是我仍然得到相同的结果。

里罗

该行为由给出。ScrollViewer.CanContentScroll="True"它基本上说,不允许您按像素滚动,而只能按项目滚动。

考虑以下示例:

private void ScrollViewer_ScrollChanged(object sender, ScrollChangedEventArgs e)
{
    var scrollViewer = (ScrollViewer) sender;
    Trace.WriteLine(string.Format("ExtentHeight: {0}, ViewportHeight : {1}, VerticalOffset : {2}",
        scrollViewer.ExtentHeight, scrollViewer.ViewportHeight, scrollViewer.VerticalOffset));
}


<ScrollViewer Height="150" ScrollChanged="ScrollViewer_ScrollChanged" CanContentScroll="True">
    <VirtualizingStackPanel>
        <Rectangle Height="40" Margin="5" Fill="Red" />
        <Rectangle Height="40" Margin="5" Fill="Green" />
        <Rectangle Height="40" Margin="5" Fill="Blue" />
        <Rectangle Height="40" Margin="5" Fill="Red" />
        <Rectangle Height="40" Margin="5" Fill="Green" />
        <Rectangle Height="40" Margin="5" Fill="Blue" />
        <Rectangle Height="40" Margin="5" Fill="Red" />
    </VirtualizingStackPanel>
</ScrollViewer>

您得到以下输出:

ExtentHeight: 7, ViewportHeight : 3, VerticalOffset : 0   
ExtentHeight: 7, ViewportHeight : 3, VerticalOffset : 1
ExtentHeight: 7, ViewportHeight : 3, VerticalOffset : 2   

但是当您设置时CanContentScroll="False"

ExtentHeight: 350, ViewportHeight : 150, VerticalOffset : 3,01724137931035
ExtentHeight: 350, ViewportHeight : 150, VerticalOffset : 6,03448275862069
ExtentHeight: 350, ViewportHeight : 150, VerticalOffset : 9,05172413793104
ExtentHeight: 350, ViewportHeight : 150, VerticalOffset : 12,0689655172414
ExtentHeight: 350, ViewportHeight : 150, VerticalOffset : 15,0862068965517
ExtentHeight: 350, ViewportHeight : 150, VerticalOffset : 18,1034482758621
ExtentHeight: 350, ViewportHeight : 150, VerticalOffset : 21,1206896551724

在第一个示例中,您将按项目滚动。您有七个项目,因此ExtentHeight为7,可见3个项目,因此ViewportHeight为3。

在第二个示例中,按像素滚动,因此ExtentHeight是所有项目的总高度,视口高度是scrollviewver的高度

故事的寓意是,在某些情况下,您不想衡量所有项目的大小,因为它可能会对性能产生负面影响。在虚拟化元素时尤其如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从列表框的ScrollInfo获取有效值

来自分类Dev

如何使用javascript获取CSS属性的有效值列表?

来自分类Dev

Python 有效值?

来自分类Dev

根据每列(R)的有效值列表对每行的无效值进行计数

来自分类Dev

错误输入后文本框清除有效值 - WPF

来自分类Dev

Python输入:从有效值列表动态创建文字别名

来自分类Dev

使用熊猫和有效值列表检测CSV列中的错别字

来自分类Dev

从存储过程填充下拉列表错误:超出有效值范围

来自分类Dev

从StreamBuilder <DocumentSnapshot>和一个子StreamBuilder获取有效值

来自分类Dev

正则表达式获取有效值

来自分类Dev

lon&lat的有效值是多少

来自分类Dev

用有效值初始化SymmetricAlgorithm

来自分类Dev

实例验证错误:*不是*的有效值

来自分类Dev

Matlab:稀疏矩阵中的有效值分配

来自分类Dev

ActiveRecord枚举错误:“不是有效值”

来自分类Dev

在Fluent验证中显示有效值

来自分类Dev

lon&lat的有效值是多少

来自分类Dev

什么是抽象xsd元素中的有效值

来自分类Dev

Matlab:稀疏矩阵中的有效值分配

来自分类Dev

LC_CTYPE的有效值?

来自分类Dev

hapi joi过滤器有效值

来自分类Dev

仅从JSON检索有效值

来自分类Dev

如何为可视铃设置有效值?

来自分类Dev

url 是查询参数的有效值吗?

来自分类Dev

按“键”列分组并获取具有一个有效值和零值的记录

来自分类Dev

将用户输入存储在列表中并编写循环以从该列表中查找有效值

来自分类Dev

在通过文本框输入有效值之前,我如何才能实质上停止VB程序?

来自分类Dev

使用JQuery获取日期中一天的最后一个有效值

来自分类Dev

有没有更好的方法来获取具有所需属性和有效值的所有产品?

Related 相关文章

热门标签

归档