1

すべてのページでSilverlightツールキットアニメーションを使用しています。クラシックページ、パノラマページ、およびピボットを閉じるときに正常に機能します。

しかし、ピボットコントロールに移動していると、特に平均的なデバイス(HTC Trophyなど)では、アニメーションがまったく開始されないことがよくあります。優れた電話(Lumia 800など)の方が優れていますが、アニメーションが毎回トリガーされるわけではありません。

初期化を遅らせ、アニメーションをキャンセルさせるピボットコントロールの既知のバグはありますか?なぜアニメーションがそれほど不安定なのか、そしてなぜそれが時々機能するのか理解できません。たとえば、Peopleアプリでは、連絡先をクリックすると、ピボットに常にアニメーションが表示されます。この振る舞いを再現できるようにしたいと思います。

参考までに、私はこのコードをxamlファイルに入れました:

<toolkit:TransitionService.NavigationInTransition>
  <toolkit:NavigationInTransition>
    <toolkit:NavigationInTransition.Backward>
      <toolkit:TurnstileTransition
        Mode="BackwardIn" />
    </toolkit:NavigationInTransition.Backward>
    <toolkit:NavigationInTransition.Forward>
      <toolkit:TurnstileTransition
        Mode="ForwardIn" />
    </toolkit:NavigationInTransition.Forward>
  </toolkit:NavigationInTransition>
</toolkit:TransitionService.NavigationInTransition>
<toolkit:TransitionService.NavigationOutTransition>
  <toolkit:NavigationOutTransition>
    <toolkit:NavigationOutTransition.Backward>
      <toolkit:TurnstileTransition
        Mode="BackwardOut" />
    </toolkit:NavigationOutTransition.Backward>
    <toolkit:NavigationOutTransition.Forward>
      <toolkit:TurnstileTransition
        Mode="ForwardOut" />
    </toolkit:NavigationOutTransition.Forward>
  </toolkit:NavigationOutTransition>
</toolkit:TransitionService.NavigationOutTransition>

手がかりがあれば役に立ちます。ありがとう。

4

1 に答える 1

1

おそらくページの読み込みが遅すぎるので、プロファイリングから始めて、実行に最も時間がかかるものを確認し、メモリ使用量を確認します。

アニメーションが表示されないときに使用するいくつかのトリック:

  • OnNavigatedToイベントとページコンストラクターからできるだけ多くのコードを削除します(コメントでAshenも言及しています)
  • レイアウトコンポーネントの量を減らします。1つのアプローチは、代わりに可能な限り多くのレイアウトを画像に置き換えてみることです。代わりに、ページが読み込まれたときにコードからコンポーネントを作成してみることもできます。(たとえば、現時点では表示されていないピボットアイテムの場合)
  • ページにBingMapsコントロールがある場合は、そのコントロールがアニメーションの表示を停止することが多いため、XAMLから削除し、代わりにコードからロードします。(読み込みが遅いため)
  • 使用するすべての画像が、可能な場合はリソースではなくコンテンツに設定されていることを確認してください。(これにより、アプリの初期読み込み時間が短縮されます)
  • デフォルト値を持つXAMLコードのすべての属性を削除します。たとえば、すでに0がデフォルト値であるため、Marginプロパティを取得した場合は不要です。Marginプロパティを削除すると、速度が少し向上します(解析する必要のあるXAMLが少なくなるため)。多くのコントロールでこれを行うと、速度が著しく向上する可能性があります。

最後に、App.xaml.csでトランジションフレームの背景を透明に設定します(塗りつぶし率を下げすぎます)。

RootFrame = new TransitionFrame() { Background = new SolidColorBrush(Colors.Transparent) };
于 2012-06-28T21:02:01.577 に答える