我正在尝试在我的应用中创建搜索功能,但是当搜索结果产生超过1000行时,会显示一个错误:
Exception {"Not enough quota is available to process this command. (Exception from HRESULT: 0x80070718)"} System.Exception
我知道这是由于系统试图在UI中进行大量更改而导致太多,以致系统终止它,因为完成该请求需要很长时间..
并且我很清楚这是因为我使用自定义wrapPanel控件来测量每个项目高度并在UI中创建块,当我使用像wrapgrid或virtualizingstackpanel这样的虚拟化控件时,不会显示任何错误..
所以,我想要完成的是,是否可以创建一个自定义控件,如包裹面板,但虚拟化数据,以便不再出现错误.. 如果可以的话,我们怎么做? 使用incrementaldataloading还是什么?
抱歉,我是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>
答案 0 :(得分:0)
也许如果你从OrientedVirtualizingPanel
派生了WrapPanel
,那么它会起作用,但我不会打赌它是可能的。您可以使用自定义虚拟化实现创建自己的列表控件,但这似乎更难。也许放弃自定义面板,只需使用WrapGrid或将结果分组到虚拟化面板中,例如具有特定大小的页面,表示结果组,每个结果在WrapPanel中具有特定数量的项目?然后,您可以将虚拟化卸载到外部面板,并使用自定义组对每个组进行样式设置。