XAML解析/布局渲染时间非常高

时间:2017-05-01 19:13:07

标签: xaml

我遇到了问题,我创建了一个可以在Windows Phone 8.1和Windows 10 Mobile上运行的应用程序。此应用程序是非UWP Windows应用商店应用程序。 我遇到的问题是,我有一个自定义控件列表,其中一个具有另一个List,未扩展(=折叠)。看起来像这样: 红色矩形是第一个ContentPresenter的{​​{1}}项,绿色矩形是第一个列表项中ItemControl的{​​{1}}个项目,在启动时不可见。单击展开按钮后,它将显示。两个ContentPresenter都配置了ItemControl,以显示您在屏幕截图中看到的内容。 (下面的XAML代码)

我遇到的主要问题是,如果我将ItemControl更改为您在上面的屏幕截图中看到的DataTemplate,则应用程序会冻结几秒钟。这取决于设备冻结的时间长短。在我的电脑上的W10M仿真器中,我不认识到冻结但是在带有WP8.1的Lumia 620上我冻结了8.5秒。 在Visual Studio的分析器中,它看起来像这样(我选择的范围是我正在讨论的问题): enter image description here

我想知道的是带有"布局"的大橙色线。如果我将它扩展到"大玩家",在探查器中每个不可见的项目都有60-70ms。

a 我问自己为什么会这样,即使这些项目不可见并且在Pivot中。此示例中Pivot的项目数为第一个VirtualizingStackPanel(红色框)为3,第三个ItemSource为17,59和1,仅显示第一个ItemControl项目已扩展。

我还想知道的是,关于时间轴,所有项目都是同时处理的,因为它们的基线适用于所有项目。但是,如果我向下滚动探查器时间轴细节,我会看到另一个名为" Parsing"对于每个项目。对于每个项目,并不是并行处理的那个。最后一项的解析适合布局事件的结束。此解析事件如下所示:enter image description here 解析需要这么长时间的原因是什么?我不认为控件非常复杂等,除了一些字符串格式之外,没有代码可以使用。

最后这里是XAML代码: 我的PivotItem在" MainPage"应用程序:

ItemControl

<PivotItem Header="Echtzeit" Margin="10,-20,10,0" > <Grid> <ScrollViewer VerticalScrollBarVisibility="Visible" > <ItemsControl ItemsSource="{Binding RealtimeDepartures, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" HorizontalAlignment="Stretch" Margin="0" > <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <controls:RealtimeStation StationName="{Binding StationName, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Departures="{Binding DepartureList, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" FontSize="{Binding DataContext.ClientFontSize, ElementName=MainPg, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" /> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </ScrollViewer> </Grid> </PivotItem> 控件XAML:

RealtimeStation

最后是<UserControl ... > <UserControl.Resources> <dec:BoolToVisibilityConverter x:Key="BoolToVisibilityConv"/> </UserControl.Resources> <Grid> <AppBarButton HorizontalAlignment="Left" VerticalAlignment="Top" Grid.Column="0" Name="btnExpand" Icon="{Binding ExpandButtonIcon, ElementName=main, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Click="btnExpand_Click" IsEnabled="{Binding IsExpandButtonEnabled, ElementName=main, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" IsCompact="True" Margin="0,-8,-2,-4" /> <StackPanel Orientation="Vertical" Margin="48,12,0,0" > <TextBlock Text="{Binding StationName, ElementName=main, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" VerticalAlignment="Center" FontSize="24" /> <TextBlock Text="Derzeit stehen keine Abfahrten an" FontStyle="Italic" Visibility="{Binding ShowNoDepartures, ElementName=main, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" FontSize="{Binding FontSize, ElementName=main, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" /> <TextBlock Text="Zugausfälle vorhanden!" Foreground="Red" FontWeight="Bold" Visibility="{Binding ShowTrainCanceled, ElementName=main, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" FontSize="{Binding FontSize, ElementName=main, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" /> <ItemsControl ItemsSource="{Binding DepartureList, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Disabled" Margin="-48,0,0,0" Visibility="{Binding IsExpanded, ElementName=main, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, Converter={StaticResource BoolToVisibilityConv}}" > <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <ContentPresenter> <controls:RealtimeDeparture DepartureDetails="{Binding}" FontSize="{Binding FontSize, ElementName=main, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" /> </ContentPresenter> </DataTemplate> </ItemsControl.ItemTemplate> </ItemsControl> </StackPanel> </Grid> </UserControl> 控件:

RealtimeDeparture

有人知道如何加快解析速度吗?这么慢的原因是什么?我是否存在禁用<UserControl ... > <Grid> <control:DisruptionIcon Height="24" Width="50" HorizontalAlignment="Left" VerticalAlignment="Top" Icon="{Binding TrainIcon, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}" Margin="3" /> <StackPanel Orientation="Vertical" Margin="56,9,0,0" > <StackPanel Orientation="Horizontal" Margin="3,0" VerticalAlignment="Center" > <TextBlock Text="{Binding DelayTimeText, ElementName=main, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Foreground="{Binding DelayColor, ElementName=main, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" /> <TextBlock Text="{Binding DepartureDetailsText, ElementName=main, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Margin="3,0" /> </StackPanel> <TextBlock Text="{Binding InformationText, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, ElementName=main}" Visibility="{Binding IsInformationVisible, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, ElementName=main}" Margin="3" FontStyle="Italic" TextWrapping="Wrap" /> <TextBlock Text="Zug fällt aus!" Foreground="Red" FontWeight="Bold" Visibility="{Binding IsCanceledVisible, UpdateSourceTrigger=PropertyChanged, Mode=OneWay, ElementName=main}" Margin="3" /> </StackPanel> </Grid> </UserControl> 的虚拟化功能的设计问题?我已经尝试了很多,但没有找到它如此缓慢的原因。

0 个答案:

没有答案