0

我有一个 WPF 列表视图,如果列表很大,则 ScrollViewer 显示。ListView 包含带有复选框元素的项目。我们为用户提供全选和取消全选的能力。

我遇到的问题只是列表更大,这意味着我们看到元素的一个子集,用户需要使用滚动条来查看其余元素。我用于选择所有元素和取消选择所有元素的代码是使用 VisualTreeHelper 帮助器类将复选框的 IsChecked 属性设置为 true 或 false。但是它只适用于可见的元素。例如,如果我有一个包含 14 个复选框的集合,其中 10 个复选框在屏幕上可见,它只会选择可见的 10 个。但是,在单击全选之前,如果您向上和向下滚动并查看项目,则它会选择所有 14 个......所以看起来 VisualTree 只加载所需的元素。有没有办法强制它加载所有元素?

我可以通过禁用 ListView 上的 ScrollViewer 并用 ScrollViewer 包围它来使其工作。这是正确的方法吗?

前:

<ListView x:Name="lstProducts" ItemsSource="{Binding Products}" ItemContainerStyle="{StaticResource STYLE_LISTVIEWITEM}" Grid.Row="1" Margin="4" SelectionMode="Multiple" />

有效的解决方案:

<ScrollViewer HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Auto" Grid.Row="1">
                    <ListView x:Name="lstProducts" ItemsSource="{Binding Products}" ItemContainerStyle="{StaticResource STYLE_LISTVIEWITEM}" Grid.Row="1" Margin="4" SelectionMode="Multiple" ScrollViewer.CanContentScroll="False" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Disabled" />
</ScrollViewer>

请指教!

4

1 回答 1

2

尝试使用<ListView VirtualizingStackPanel.IsVirtualizing="false" />关闭虚拟化,因为 listview 容器正在被回收并且只存在可见容器。

于 2014-03-20T13:13:29.373 回答