2
我目前在我的項目中使用Prism WinRT。佈局週期檢測到的錯誤Windows 8.1 Gridview
基於網絡搜索這是我曾嘗試:
-
從數據模板
- 刪除進度條,(這應該已經被固定在Win 8.1雖然)
- 加入固定的寬度和高度圖像
我發現進度欄有這個錯誤,我從我的數據模板中刪除它,但我仍然看到了錯誤。
在初始加載一切似乎很好,但是當我更改視圖模型中的數據收集基於用戶選擇的過濾器,並開始滾動我間歇性地打這個問題。在讓用戶滾動之前,是否有任何事件我應該等待?
如果我使用一個堆棧面板作爲ItemsPanel,那麼我不會看到這個錯誤,但是後來我放棄了虛擬化功能,並且它永遠需要顯示大型數據集。
我已經在應用程序中提供了代碼,我可以簡化它,如果任何人想要。
<SemanticZoom.ZoomedInView>
<GridView Style="{StaticResource mainGridViewStyle}" ItemsSource="{Binding Source={StaticResource itemsViewSource}}" Name="itemsGridView" common:GridViewItemClickedCommand.Command="{Binding ItemClickedCommand}" />
</SemanticZoom.ZoomedInView>
<CollectionViewSource
x:Name="itemsViewSource"
Source="{Binding PageData}"
IsSourceGrouped="True"
ItemsPath="Contents"
/>
<Style x:Key="mainGridViewStyle" TargetType="GridView">
<Setter Property="AutomationProperties.AutomationId" Value="ItemsGridView"/>
<Setter Property="AutomationProperties.Name" Value="Items"/>
<Setter Property="TabIndex" Value="1"/>
<Setter Property="Padding" Value="120,0,0,50"/>
<Setter Property="SelectionMode" Value="Multiple"/>
<Setter Property="IsSwipeEnabled" Value="True"/>
<Setter Property="IsItemClickEnabled" Value="True"/>
<Setter Property="IsEnabled" Value="{Binding IsGridViewEnabled}"/>
<Setter Property="CanReorderItems" Value="False"/>
<Setter Property="CanDragItems" Value="False"/>
<Setter Property="Margin" Value="0"/>
<Setter Property="HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="VerticalContentAlignment" Value="Stretch"/>
<Setter Property="ShowsScrollingPlaceholders" Value="True"/>
<Setter Property="ItemTemplateSelector" Value="{StaticResource gridViewTemplateSelector}"/>
<Setter Property="ScrollViewer.IsHorizontalScrollChainingEnabled" Value="False"/>
<Setter Property="GroupStyleSelector" Value="{StaticResource GridViewGroupStyleSelector}"/>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<ItemsWrapGrid GroupPadding="0,0,80,0" />
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="Grid.Row" Value="1"/>
</Style>
<views:ViewTemplateSelector x:Key="gridViewTemplateSelector"
iconViewTemplate="{StaticResource iconViewTemplate}"
thumbnailViewTemplate="{StaticResource thumbnailViewTemplate}"/>
<DataTemplate x:Key="iconViewTemplate">
<Grid x:Name="itemMainGrid" HorizontalAlignment="Left" Width="200" Height="75" Background="White" Margin="0,0,5,5">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="90*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ProgressRing x:Name="contentUpdatingProgressBar" Grid.RowSpan="3" Grid.ColumnSpan="2" Opacity="0.5" IsActive="{Binding IsContentUpdating}" Foreground="{StaticResource AppHeaderForeGroundColor}" Visibility="{Binding IsContentUpdating, Converter={StaticResource VisibilityConvertor}}">
</ProgressRing>
<Image x:Name="iconImage" Source="{Binding FileIconLink}" Stretch="UniformToFill" Grid.RowSpan="3" Margin="5" Width='75" Height ="75">
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ImageFailed">
<core:ChangePropertyAction PropertyName="Source" Value="{Binding FileIconLink}"/>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</Image>
<TextBlock x:Name="contentName" Text="{Binding Name}" Margin="2" Style="{StaticResource CaptionTextBlockStyle}" Foreground="Black" Grid.Column="1" HorizontalAlignment="Left">
</TextBlock>
<TextBlock x:Name="contentSize" Text="{Binding FormattedSize,TargetNullValue=''}" Style="{StaticResource CaptionTextBlockStyle}" Foreground="Black" Margin="2" Grid.Column="1" Grid.Row="1" Visibility="{Binding FormattedSize, Converter={StaticResource SizeVisibilityConvertor}}" HorizontalAlignment="Right" VerticalAlignment="Bottom">
</TextBlock>
<StackPanel x:Name="transferStatusPanel" Grid.Row="2" Grid.Column="1" Orientation="Horizontal" >
<TextBlock Text="{Binding ContentStatus}" FontFamily="Segoe UI" FontWeight="Light" FontSize="8" Margin="2,0,2,0" Foreground="Black" Visibility="{Binding ContentStatus, Converter={StaticResource SizeVisibilityConvertor}}" HorizontalAlignment="Left">
</TextBlock>
<TextBlock Text="{Binding TransferProgress}" FontFamily="Segoe UI" FontWeight="Light" FontSize="8" Margin="2,0,1,0" Foreground="Black" Visibility="{Binding IsTransferActive, Converter={StaticResource VisibilityConvertor}}" HorizontalAlignment="Left">
</TextBlock>
<TextBlock Text=" %" FontFamily="Segoe UI" FontWeight="Light" FontSize="8" Margin="0,0,2,0" Foreground="Black" Visibility="{Binding IsTransferActive, Converter={StaticResource VisibilityConvertor}}" HorizontalAlignment="Left">
</TextBlock>
<!--ProgressBar Visibility="{Binding IsTransferActive, Converter={StaticResource VisibilityConvertor}}" Margin="2" Value="{Binding TransferProgress, FallbackValue=0}" Foreground="Blue" Background="Gray" FlowDirection="LeftToRight"/-->
</StackPanel>
</Grid>
</DataTemplate>
<DataTemplate x:Key="thumbnailViewTemplate">
<Grid x:Name="itemMainGrid" HorizontalAlignment="Left" Width="150" Height="150" Margin="0,0,5,5">
<Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}">
<Image x:Name="iconImage" Source="{Binding ThumbnailLink}" Stretch="UniformToFill" Width='150" Height ="150">
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="ImageFailed">
<core:ChangePropertyAction PropertyName="Source" Value="{Binding FileIconLink}"/>
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</Image>
</Border>
<StackPanel VerticalAlignment="Bottom" Background="{ThemeResource ListViewItemOverlayBackgroundThemeBrush}">
<ProgressRing x:Name="contentUpdatingProgressBar" Grid.ColumnSpan="2" Grid.RowSpan="4" IsActive="{Binding IsContentUpdating}" Foreground="{StaticResource AppHeaderForeGroundColor}" Visibility="{Binding IsContentUpdating, Converter={StaticResource VisibilityConvertor}}">
</ProgressRing>
<TextBlock x:Name="contentName" Text="{Binding Name}" Foreground="{ThemeResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource CaptionTextBlockStyle}" Margin="15,0,15,0">
</TextBlock>
<TextBlock x:Name="contentSize" Text="{Binding FormattedSize,TargetNullValue=''}" Foreground="{ThemeResource ListViewItemOverlaySecondaryForegroundThemeBrush}" Style="{StaticResource CaptionTextBlockStyle}" TextWrapping="NoWrap" Margin="15,0,15,10" HorizontalAlignment="Right" VerticalAlignment="Bottom">
</TextBlock>
<StackPanel x:Name="transferStatusPanel" Orientation="Horizontal" >
<TextBlock Text="{Binding ContentStatus}" FontFamily="Segoe UI" FontWeight="Light" FontSize="8" Margin="2,0,2,0" Foreground="Black" Visibility="{Binding ContentStatus, Converter={StaticResource SizeVisibilityConvertor}}" HorizontalAlignment="Left">
</TextBlock>
<TextBlock Text="{Binding TransferProgress}" FontFamily="Segoe UI" FontWeight="Light" FontSize="8" Margin="2,0,1,0" Foreground="Black" Visibility="{Binding IsTransferActive, Converter={StaticResource VisibilityConvertor}}" HorizontalAlignment="Left">
</TextBlock>
<TextBlock Text=" %" FontFamily="Segoe UI" FontWeight="Light" FontSize="8" Margin="0,0,2,0" Foreground="Black" Visibility="{Binding IsTransferActive, Converter={StaticResource VisibilityConvertor}}" HorizontalAlignment="Left">
</TextBlock>
<!--ProgressBar Visibility="{Binding IsTransferActive, Converter={StaticResource VisibilityConvertor}}" Margin="2" Value="{Binding TransferProgress, FallbackValue=0}" Foreground="Blue" Background="Gray" FlowDirection="LeftToRight"/-->
</StackPanel>
</Grid>
</DataTemplate>
<GroupStyle x:Key="gridViewGroupStyle" HidesIfEmpty="True">
<GroupStyle.HeaderTemplate>
<DataTemplate>
<Grid x:Name="headerGrid">
<Button x:Name="headerButton" Content='{Binding Name}' Background="Transparent" Foreground="AliceBlue" Margin="0" Padding="0,5,5,5" BorderThickness="0" Command="{Binding DataContext.HeaderCommand, ElementName=pageRoot}"
IsRightTapEnabled="False" IsHoldingEnabled="False" IsDoubleTapEnabled="False" CommandParameter="{Binding HeaderIdentifier}" FontFamily="Global User Interface" />
</Grid>
</DataTemplate>
</GroupStyle.HeaderTemplate>
</GroupStyle>
public class ViewTemplateSelector: DataTemplateSelector
{
public DataTemplate iconViewTemplate { get; set; }
public DataTemplate thumbnailViewTemplate { get; set; }
protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
{
if (Utilities.GridviewItemStyle == GridviewItemStyle.IconStyle)
return iconViewTemplate;
else
return thumbnailViewTemplate;
}
}
public class GridViewGroupStyleSelector : GroupStyleSelector
{
protected override GroupStyle SelectGroupStyleCore(object group, uint level)
{
return (GroupStyle)App.Current.Resources["gridViewGroupStyle"];
}
}