gpt4 book ai didi

wpf - 如何通过重新定义的列表框模板使用 UI 虚拟化

转载 作者:行者123 更新时间:2023-12-02 17:34:39 29 4
gpt4 key购买 nike

我正在尝试将 ListBox 用作包含多个项目的 View ,当然,我需要在其中使用 UI 虚拟化。

问题是只有当我这样声明 ListBox 时虚拟化才有效:

<ListBox 
ItemsSource="{Binding ItemsSource}"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">

<ListBox.ItemTemplate>
<DataTemplate>
<views:SiteEntryView />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

但如果我尝试自定义它,它就不再虚拟化了:

<ListBox 
ItemsSource="{Binding ItemsSource}"
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">

<ListBox.Template>
<ControlTemplate>
<ScrollViewer>
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ListBox.Template>

<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>

<ListBox.ItemTemplate>
<DataTemplate>
<views:SiteEntryView />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>

据我所知,此示例包含的内容与 ListBox 默认包含的内容相同。但是虚拟化不起作用。我在这里阅读了几篇文章和几个答案,但仍然无法弄清楚“一般方法” - 我必须设置、绑定(bind)、添加什么以及在哪里设置、绑定(bind)、添加等以使虚拟化与自定义模板一起工作?

最佳答案

两件事:

更新您的PanelTemplate以使用VirtualizingStackPanel并将您的虚拟化选项添加到ScrollViewer >控件模板

<ListBox.Template>
<ControlTemplate>
<ScrollViewer VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling">
<ItemsPresenter />
</ScrollViewer>
</ControlTemplate>
</ListBox.Template>

<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>

<ListBox.ItemTemplate>
<DataTemplate>
<views:SiteEntryView />
</DataTemplate>
</ListBox.ItemTemplate>

关于wpf - 如何通过重新定义的列表框模板使用 UI 虚拟化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28354139/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com