0
我正在使用帶有模板選擇器的GridView,並在後面的代碼中傳遞了項目源。與此問題是,VariableSizedWrapGrid是非常慢,收集傳遞約80個項目大(集合是由幾個字符串組成)。刪除variableSizedWrapGrid解決了這個問題,但讓我在寬度較小的模板之間留下很大空白。Windows 8 Xaml Slow 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>
和模板選擇:
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;
}
}
}
我沒想到這都會有這樣的使用variableSized會給頁面帶來較大的性能difference..just 3秒的延遲,這在一些低端平板電腦上甚至更大。
我做錯了,有沒有更好的方法來做到這一點?
有沒有辦法通過WrapGrid最小化模板之間的差距? GridView似乎根據集合中的第一個來修復項目寬度。 – user2165988 2013-03-17 22:22:14
WrapGrid爲其所有項目執行相同的大小,並且您無法對其執行任何操作。您可能不得不重新考慮您的佈局或使用GridView重新考慮。如果不知道設計目標,我不能提出更具體的建議。 – Denis 2013-03-18 22:07:48