C# Windows 8 Xaml慢速变量SizedWrapGrid

C# Windows 8 Xaml慢速变量SizedWrapGrid,c#,xaml,windows-8,C#,Xaml,Windows 8,我使用带有模板选择器的GridView,并在代码中传递项源代码。问题是VariableSizedWrapGrid非常慢,传递的集合大约有80个条目(集合由几个字符串组成)。删除variableSizedWrapGrid解决了这个问题,但是在宽度较小的模板之间留下了很大的间隙 以下是GridView: <SemanticZoom x:Name="Zoom" Grid.Row="1" IsZoomedInViewActive="False" ViewChangeStarted="Zoo

我使用带有模板选择器的GridView,并在代码中传递项源代码。问题是VariableSizedWrapGrid非常慢,传递的集合大约有80个条目(集合由几个字符串组成)。删除variableSizedWrapGrid解决了这个问题,但是在宽度较小的模板之间留下了很大的间隙

以下是GridView:

    <SemanticZoom x:Name="Zoom" Grid.Row="1" IsZoomedInViewActive="False" ViewChangeStarted="Zoom_ViewChangeStarted_1" IsZoomOutButtonEnabled="False" Margin="0,0,0,29" Grid.RowSpan="2">
        <SemanticZoom.ZoomedInView>
            <!-- Horizontal scrolling grid used in most view states -->
            <GridView
        x:Name="itemGridView"
        AutomationProperties.AutomationId="ItemsGridView"
        AutomationProperties.Name="Items"
        TabIndex="1"
        ItemTemplateSelector="{StaticResource DayTemplateSelector}"
        SelectionMode="None"
        IsSwipeEnabled="True"
        ItemContainerStyle="{StaticResource GridViewItemStyle1}"
        ScrollViewer.HorizontalScrollBarVisibility="Auto"
        IsItemClickEnabled="True"
        ScrollViewer.IsHorizontalScrollChainingEnabled="False"
        ItemClick="ItemView_ItemClick">
                <GridView.ItemsPanel>
                    <ItemsPanelTemplate>
                        <VariableSizedWrapGrid ItemWidth="380" ItemHeight="500"/>
                    </ItemsPanelTemplate>
                </GridView.ItemsPanel>
            </GridView>
        </SemanticZoom.ZoomedInView>
我没想到这会有这么大的性能差异。只使用variableSized会使页面延迟3秒,在一些低端平板电脑上甚至更大


我做错了吗?有没有更好的方法

VariableSizedWrapGrid与WrapGrid不同,WrapGrid不会虚拟化其项。我建议,如果必须显示80个项目,请使用WrapGrid,或者如果必须使用VariableSizedWrapGrid,请将项目数量减少到更易于管理的水平

有没有办法通过WrapGrid最小化模板之间的差距?GridView似乎基于集合中的第一个项来修复项宽度,否则。WrapGrid对其所有项强制执行相同的大小,对此您无能为力。您可能需要重新考虑布局或重新考虑使用GridView。在不了解您的设计目标的情况下,我无法提出更具体的建议。
     class DayTemplateSelecter : DataTemplateSelector
{
    public DataTemplate DayOffTemplate { get; set; }

    public DataTemplate DutyTemplate { get; set; }

    public DataTemplate RestTemplate { get; set; }

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        var templateItem = item as DutyItem;
        var element = container as FrameworkElement;


        if (templateItem.Trip.Count > 0 || templateItem.OtherTrip.Count > 0)
        {
            container.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, 2);
                return DutyTemplate;
        }
        else if (templateItem.Codes.Count > 0)
        {
                container.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, 1);
                return DayOffTemplate;

        }
        else
        {
            container.SetValue(VariableSizedWrapGrid.ColumnSpanProperty, 1);
            return RestTemplate;
        }

    }

}