我一直在试图弄清楚如何提高我的数据透视控件的性能,它有 4 个 PivotItems,每个 PivotItems 都有 C# 中带有数据绑定的列表框。BackgroundWorker 减少了加载时间,但即使执行了所有后台任务,前两次滑动也总是滞后。4 秒的延迟是不可接受的。我认为这可能是由如下所示的列表框项模板引起的:
<DataTemplate x:Key="MetroList">
<Grid MinHeight="120">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="190"/>
<ColumnDefinition Width="32"/>
<ColumnDefinition Width="230"/>
</Grid.ColumnDefinitions>
<ListBox Width="190" ScrollViewer.VerticalScrollBarVisibility="Disabled" ItemsSource="{Binding connectingLines}" FlowDirection="RightToLeft" Margin="0,12" VerticalAlignment="Center">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="6,0,0,6">
<Rectangle Fill="{Binding LineColor}" RadiusX="3" RadiusY="3"/>
<TextBlock Text="{Binding LineNumber}" FontWeight="Bold" Padding="8,0" FontSize="24" Margin="0,5,0,3" MinWidth="50" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel/>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
<Ellipse Width="20"
Height="20"
Fill="White"
StrokeThickness="3"
Stroke="#FF222378"
HorizontalAlignment="Left"
VerticalAlignment="Center"
Margin="6,0,0,0"
Grid.Column="1"/>
<Rectangle Fill="#FF222378"
Width="8"
Height="3"
Grid.Column="1"
HorizontalAlignment="Right"
VerticalAlignment="Center" Margin="-1,0,0,0" />
<TextBlock
TextWrapping="Wrap"
Text="{Binding stopName}"
FontFamily="Segoe WP Semibold"
FontWeight="Bold"
Foreground="#1E1B6E"
x:Name="StationName"
FontSize="32"
Width="200"
VerticalAlignment="Center"
Margin="12,6,0,10"
LineHeight="32"
Tag="{Binding stopId}"
Tap="StationName_Tap"
Grid.Column="2"
/>
</Grid>
</DataTemplate>
我尝试取消 ListBox,因为它是最近在应用程序出现性能问题之前添加的。但它只会将延迟时间减少几毫秒。我还尝试将 VirtualizingStackPanel.VirtualizationMode 设置为回收以防万一,但这并没有做任何事情。我能做些什么来改善用户体验?我听说在需要时加载 PivotItem 内容,但无法从谷歌找到任何有用的内容,因为大多数文章都使用 pivot.loadedpivotitem 或 pivotitem.loaded 事件,两者都无助于消除滞后。
编辑:我意识到即使后台线程正在工作,ui线程也会受到影响。页面已加载,但您无法对其执行任何操作,例如在数据绑定完成之前滑动。在那之后,手势仍然滞后。