为winrt-xaml定制虚拟化换行面板
本文关键字:换行 虚拟化 winrt-xaml | 更新日期: 2023-09-27 18:14:18
我试图在我的应用程序中创建搜索功能,但当搜索结果产生超过1000行,一个错误显示说:
Exception {"Not enough quota is available to process this command. (Exception from HRESULT: 0x80070718)"} System.Exception
我知道这是由于系统试图在UI中进行大量更改,并且它的方式太多,所以系统终止了它,因为它需要很长时间才能完成该请求…
,我很清楚这一点,因为我使用一个自定义的wrapPanel控件来测量每个项目的高度,并在UI中创建块,当我使用虚拟化控件如wrapgrid或virtualizingstackpanel时,没有错误显示…
所以,我想要完成的是,是否有可能创建一个自定义控件,如包装面板,但虚拟化数据,使错误不会再出现。如果可以,我们该怎么做?增量数据加载还是什么?
对不起,我是新的winrt-xaml,我正试图找出它是什么:)
更新:这是链接,我得到WrapPanel.cs我的XAML代码是这样的:
<GridView x:Name="gvResult">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<local:WrapPanel
Orientation="Vertical"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate>
<Grid Margin="5">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300" />
</Grid.ColumnDefinitions>
<TextBlock Width="300" TextWrapping="Wrap">
<Underline>
<Run FontWeight="Medium" Text="{Binding abbKitab}"/><Run Text=" "/><Run FontWeight="Medium" Text="{Binding numBab}"/>
<Run FontWeight="Medium" Text=":"/> <Run FontWeight="Medium" Text="{Binding numAyat}"/>
</Underline>
<LineBreak/>
<Run Text="{Binding isi}"/>
</TextBlock>
</Grid>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
如果您从OrientedVirtualizingPanel
派生出WrapPanel
,这可能会起作用,但我不认为这是可能的。您可以使用自定义虚拟化实现创建自己的列表控件,但这似乎更加困难。也许放弃你的自定义面板,只是使用WrapGrid或在虚拟面板中分组你的结果,例如,有特定大小的页面,代表一组结果,每个结果在WrapPanel中有特定数量的项目?然后,您可以将虚拟化卸载到外部面板,并使用您自定义的组对每个组进行样式设置。