スイッチとして機能する 3 つのアイテムからなる素敵なタイルのリストを作成しました。次のようになります。
いいですね。ええと、縦にスクロールするリストにこれらのタイルが約 130 個ありますが、ロードするのに時間がかかります。パフォーマンス分析ツールによると、各要素のレンダリングには約 18 ミリ秒かかり、レンダリング時間は約 2.3 秒です。デバイスでは、多くの場合その 2 倍です。これは実際には危機ではありませんが、これらの要素が描画されるまで、UI は完全に黒く反応しません。
オンラインでいくつかの調査を行った後、これはWrapPanel
ツールキットからのコントロールがその項目を仮想化しないためであることがわかりました。そのGPU
ため、すべてのオブジェクトを一度にレンダリングします (プロセスで大量のメモリを消費します)。
さて、これをより速くする方法はありますか?
XAML:
<ListBox x:Name="ChannelsListBox" Grid.Row="2" Margin="0,40,0,0">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.Template>
<ControlTemplate>
<ItemsPresenter />
</ControlTemplate>
</ListBox.Template>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid x:Name="ChannelTile" Margin="6,6,6,6" Tap="ChannelTile_Tap">
<!-- context menu code removed -->
<Rectangle Width="136" Height="136" Fill="{StaticResource LightGrayColor}" />
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
のListBox
ItemsSource はコード ビハインドで設定されています。