3

私は、ピボット コントロールのパフォーマンスを改善する方法を見つけようとしています。このピボット コントロールには、C# でデータ バインドされたリスト ボックスがそれぞれ 4 つある PivotItems があります。BackgroundWorker を使用すると読み込み時間が短縮されますが、すべてのバックグラウンド タスクが実行されている場合でも、最初の 2 つのスワイプは常に遅延します。4 秒のラグは許容できません。次のようなリストボックス itemtemplate が原因である可能性があると思いました。

<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 イベントを使用しており、どちらも遅延を解消するのに役立たなかったため、Google から役立つものを見つけることができませんでした。


編集: バックグラウンド スレッドが機能していても、何らかの形で ui スレッドが影響を受けていることに気付きました。ページは読み込まれますが、データ バインドが完了するまでスワイプなどの操作はできません。その後もジェスチャーは遅れています。

4

1 に答える 1

0

読み込みに関する問題は、巨大な ItemsSource が原因である可能性があります。アプリでインクリメンタル スクロールの実行を試みることができます ( ISupportIncrementalLoading )。最初にロードするアイテムを少なくし、残りのアイテムをオンデマンドでロードします。

于 2014-03-19T13:21:59.907 に答える