相关疑难解决方法(0)

虚拟化ItemsControl?

我有一个ItemsControl数据列表,我想虚拟化,但VirtualizingStackPanel.IsVirtualizing="True"似乎不适用于ItemsControl.

这是真的吗,还是有另一种方法可以做到这一点,我不知道?

要测试我一直在使用以下代码块:

<ItemsControl ItemsSource="{Binding Path=AccountViews.Tables[0]}"
              VirtualizingStackPanel.IsVirtualizing="True">
<ItemsControl.ItemTemplate>
    <DataTemplate>
        <TextBlock Initialized="TextBlock_Initialized"  
                   Margin="5,50,5,50" Text="{Binding Path=Name}" />
    </DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

如果我将其更改ItemsControl为a ListBox,我可以看到该Initialized事件只运行了几次(巨大的边距只是因此我只需要通过一些记录),但是ItemsControl每个项目都会被初始化.

我试过设置ItemsControlPanelTemplate为a VirtualizingStackPanel但似乎没有帮助.

wpf virtualization itemscontrol virtualizingstackpanel

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

是否可以在WPF列表视图中实现平滑滚动?

是否可以在WPF中实现平滑滚动,listview就像在Firefox中一样?
当Firefox浏览器包含所有listview项目并按住鼠标中键(但不是释放)并拖动它时,它应该平滑地滚动listview项目.当你释放它应该停止.

看起来这在winforms中是不可能的,但我想知道它是否在WPF中可用?

.net c# wpf listview scroll

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

带有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万
查看次数

为什么回收不起作用?

我们有一个桌面应用程序,我们有一个ListView,它ListView.ItemTemplate是一个扩展的KPageScrollViewerScrollViewer

虽然我们设定VirtualizingStackPanel.IsVirtualizing="True"VirtualizingStackPanel.VirtualizationMode="Recycling"

我们注意到KPageScrollViewer的构造函数(在其中ItemTemplate)总是在查看ListView中的项目时执行.

我们期望它将被创建4到5次,然后,相同的实例将用于查看数据,因为我们使用的是回收模式,但这不会发生,因此我们最终会得到越来越多的KPageScrollViewer实例创造..

是因为我们定制了ListView.ItemsPanel吗?

<ListView.ItemsPanel>
    <ItemsPanelTemplate >
        <p:KVirtualizingStackPanel IsItemsHost="True"
Run Code Online (Sandbox Code Playgroud)

有什么好主意吗?我想知道哪些原因会导致回收功能丢失?

<ListView  x:Class="KETAB.KStudio.Stage.PagesView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:p="clr-namespace:KETAB.KStudio.Stage"
    Name="PagesList" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" 
    Loaded="instScroll_Loaded"
    AllowDrop="True" 
    MouseMove="PagesList_MouseMove"
    ScrollViewer.PanningMode="None"
    VirtualizingStackPanel.IsVirtualizing="True"
    VirtualizingStackPanel.CleanUpVirtualizedItem="PagesList_CleanUpVirtualizedItem"
    VirtualizingStackPanel.VirtualizationMode="Recycling"
    >

    <ListView.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary  Source="Resources/StageResources.xaml"/>
                <ResourceDictionary Source="/KETAB.KStudio.UserControls;component/ScrollViewerStyle.xaml" />
            </ResourceDictionary.MergedDictionaries>
            <SolidColorBrush  x:Key="{x:Static SystemColors.HighlightBrushKey}" Opacity="0.4" Color="Transparent" />
            <SolidColorBrush  x:Key="{x:Static SystemColors.ControlBrushKey}"  Opacity="0.4" Color="Transparent"  />
            <!--<p:PageWidthConverter x:Key="PageWidthConverter" />-->
            <p:PageWidthConverter x:Key="pageWidthConverter" />
            <p:PageHeightConverter x:Key="pageHeightConverter" />
            <Style  TargetType="{x:Type ListViewItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListViewItem}">
                            <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding …
Run Code Online (Sandbox Code Playgroud)

.net wpf scroll recycle

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

部分垂直滚动

我有一个ListBox包含两列的列 - 第一列包含一个Toggle Button,第二列包含一个Expander包含多个控件的列.如果expander折叠,整体滚动ListBox工作正常.但是,如果Expander打开并且展开器包含大量项目,ListBox则将滚动整个行大小,通常不显示expander列表的一部分.

这类似于在列表框中放置一个大于列表框可视区域的图像.在这种情况下,如果单击滚动条,则需要"向下"移动图像,而不会在一次单击时滚动屏幕.

是否有一个设置ListBox允许部分滚动,如我所述?我listBox在a中定义xaml,控件是通过C#代码添加的.

c# xaml listbox

2
推荐指数
1
解决办法
718
查看次数