【问题标题】:custom virtualizing wrap panel for winrt-xamlwinrt-xaml 的自定义虚拟化包装面板
【发布时间】:2013-05-20 21:32:58
【问题描述】:

我正在尝试在我的应用程序中创建搜索功能,但是当搜索结果产生超过 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>

【问题讨论】:

    标签: c# windows-8 windows-runtime winrt-xaml virtualization


    【解决方案1】:

    也许如果你从OrientedVirtualizingPanel 派生出你的WrapPanel 它会起作用,但我不会打赌它是可能的。您可以使用自定义虚拟化实现创建自己的列表控件,但这似乎更难。也许放弃您的自定义面板,只使用 WrapGrid 或将您的结果分组到虚拟化面板中,例如有特定大小的页面来表示结果组,每个结果组在 WrapPanel 中都有特定数量的项目?然后,您可以将虚拟化卸载到外部面板,并让每个组都使用您的自定义样式。

    【讨论】:

    • 如果我可以使用 wrapgrid,我不会把我自己和这个混淆。问题是,wrapgrid 创建一个项目面板,可以从第一个项目面板修复它的大小。并且我的数据对于每个数据都有不同的行。有关更多信息,我正在构建一个圣经应用程序,所以这是一篇在每个项目上都有不同行的文章.. ummm..您如何看待 RichTextBlock 控件?
    猜你喜欢
    • 1970-01-01
    • 2016-03-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多