2014-06-11 32 views
2

我目前在我的項目中使用Prism WinRT。佈局週期檢測到的錯誤Windows 8.1 Gridview

基於網絡搜索這是我曾嘗試:

    從數據模板
  1. 刪除進度條,(這應該已經被固定在Win 8.1雖然)
  2. 加入固定的寬度和高度圖像

我發現進度欄有這個錯誤,我從我的數據模板中刪除它,但我仍然看到了錯誤。

在初始加載一切似乎很好,但是當我更改視圖模型中的數據收集基於用戶選擇的過濾器,並開始滾動我間歇性地打這個問題。在讓用戶滾動之前,是否有任何事件我應該等待?

如果我使用一個堆棧面板作爲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"]; 
     } 
    } 

回答

1

所以我無法想出解決辦法,但使用不同的參數再導航到同一個頁面(我調整框架日誌來不是這些條目添加到導航歷史記錄)解決了這個問題。某處循環使用ui元素會導致循環。