2017-07-28 71 views
0

在UWP我有这样的:C#UWP工具包ImageEx周期检测

<GridView x:Name="gvList" 
     ScrollViewer.HorizontalScrollBarVisibility="Disabled" 
     ScrollViewer.HorizontalScrollMode="Disabled" 
     ScrollViewer.VerticalScrollBarVisibility="Hidden" 
     ScrollViewer.VerticalScrollMode="Enabled" 
     VerticalAlignment="Stretch" 
     HorizontalAlignment="Stretch" 
     ItemTemplate="{StaticResource Template}" 
     Grid.Row="1" 
     ItemContainerStyle="{StaticResource ListViewNoAnimationStyle}"> 
    <GridView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <ItemsWrapGrid Orientation="Horizontal"/> 
     </ItemsPanelTemplate> 
    </GridView.ItemsPanel> 
</GridView> 

datatemplate是这样的:

<DataTemplate x:Key="Template" x:DataType="data:Item"> 
    <customControls:CustomControl 
     Model="{x:Bind Mode=OneWay}" 
     Width="{Binding ItemWidth, ElementName=customListControl}" 
     Height="{Binding ItemHeight, ElementName=customListControl}" 
     ItemPadding="{Binding ItemPadding, ElementName=customListControl}"/> 
</DataTemplate> 

在CustomControl有一个ImageEx控制:

<controls:ImageEx x:Name="imageBackground" Source="{x:Bind Image, Mode=OneWay}" Stretch="UniformToFill"/> 

列表中有超过500个项目正在填充此GridView。

问题是我得到了“检测到布局周期,布局无法完成​​”。错误。如果我使用图像而不是ImageEx,则一切正常。

但是,我需要使用ImageEx,因为它设置它的来源是异步的,所以它填充所有内容而不会阻塞UI。

任何人都有这个想法?

+0

这是一个非常通用的错误通常不利于许多。你可以创建一个回购? –

+0

这里是上传的项目https://files.fm/u/6ceennzx – user3239349

+0

如何重现它? –

回答

1

由于用户AVK和他联系https://github.com/Microsoft/UWPCommunityToolkit/issues/1328,我已经加入这种风格到我的应用程序,它固定ImageEx布局周期问题的问题:

<Style TargetType="controls:ImageEx"> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="Foreground" Value="{ThemeResource ApplicationForegroundThemeBrush}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="controls:ImageEx"> 
       <Grid Background="{TemplateBinding Background}"> 
        <Image 
         Name="PlaceholderImage" 
         HorizontalAlignment="{TemplateBinding HorizontalAlignment}" 
         VerticalAlignment="{TemplateBinding VerticalAlignment}" 
         Opacity="1.0" 
         Source="{TemplateBinding PlaceholderSource}" 
         Stretch="{TemplateBinding PlaceholderStretch}" /> 
        <Image 
         Name="Image" 
         HorizontalAlignment="{TemplateBinding HorizontalAlignment}" 
         VerticalAlignment="{TemplateBinding VerticalAlignment}" 
         NineGrid="{TemplateBinding NineGrid}" 
         Opacity="0.0" 
         Stretch="{TemplateBinding Stretch}" /> 
        <ProgressRing 
         Name="Progress" 
         Margin="16" 
         HorizontalAlignment="Center" 
         VerticalAlignment="Center" 
         Background="Transparent" 
         Foreground="{TemplateBinding Foreground}" 
         IsActive="False" 
         Visibility="Collapsed" /> 
        <VisualStateManager.VisualStateGroups> 
         <VisualStateGroup x:Name="CommonStates"> 
          <VisualState x:Name="Failed"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Image" Storyboard.TargetProperty="Opacity"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="0" /> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PlaceholderImage" Storyboard.TargetProperty="Opacity"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="1" /> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Loading"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Progress" Storyboard.TargetProperty="IsActive"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="True" /> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Progress" Storyboard.TargetProperty="Visibility"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" /> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Image" Storyboard.TargetProperty="Opacity"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="0" /> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PlaceholderImage" Storyboard.TargetProperty="Opacity"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="1" /> 
            </ObjectAnimationUsingKeyFrames> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Loaded"> 
           <Storyboard> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Progress" Storyboard.TargetProperty="IsActive"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="False" /> 
            </ObjectAnimationUsingKeyFrames> 
            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="Progress" Storyboard.TargetProperty="Visibility"> 
             <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed" /> 
            </ObjectAnimationUsingKeyFrames> 
            <DoubleAnimation 
             AutoReverse="False" 
             BeginTime="0" 
             Storyboard.TargetName="Image" 
             Storyboard.TargetProperty="Opacity" 
             From="0" 
             To="1" /> 
            <DoubleAnimation 
             AutoReverse="False" 
             BeginTime="0" 
             Storyboard.TargetName="PlaceholderImage" 
             Storyboard.TargetProperty="Opacity" 
             From="1" 
             To="0" /> 
           </Storyboard> 
          </VisualState> 
          <VisualState x:Name="Unloaded" /> 
         </VisualStateGroup> 
        </VisualStateManager.VisualStateGroups> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 
+0

你应该接受它作为答案! –

+0

我仍然不能接受,还有7个小时。 – user3239349