1

ユーザーがリストボックス内の項目を選択すると、素敵なフライアウト アニメーションを持つアプリケーションがあります。ユーザーが戻るボタンをクリックすると、フライイン アニメーションが使用されます。ここで例を見ることができます: このサンプルと同じアニメーション コードを使用しています。クリックされたアイテムが画面の下部または上部から部分的に外れるまで、すべてが正常に機能します。フライアウト アニメーションは適切に発生しますが、ユーザーがリストに戻ると、リスト ボックスは選択した項目を上 (または下) に自動スクロールして完全に表示されます。ただし、フライイン アニメーションは、テキストを元の (自動スクロールが発生する前の) 場所に戻します。私が何をしているのかを完全に理解するには、作業サンプルをダウンロードする必要があるかもしれません。

私が持っている質問は、この自動スクロール アクションを無効にする方法はありますか。メッセージングや電子メールなどの組み込みアプリは、部分的に表示されているアイテムを選択しても、スクロールして表示されません。

ありがとう

4

1 に答える 1

1

自動スクロール アクションを無効にする方法はわかりませんが、そのコードを簡単に修正できます。

クラスでItemFlyInAndOutAnimations

フィールドを追加する

private FrameworkElement _element; //let's consider the line is 266

変更をpublic void ItemFlyIn()加える:

public void ItemFlyIn()
{
  if (_popupCanvas.Children.Count != 2)
    return;

  _popup.IsOpen = true;
  _backgroundMask.Opacity = 0.0;

  Image animatedImage = _popupCanvas.Children[1] as Image;

  var sb = new Storyboard();

  var rootFame =  Application.Current.RootVisual as FrameworkElement; //new line
  var targetElementPosition = _element.GetRelativePosition(rootFame); //new line
  // animate the X position
  var db = CreateDoubleAnimation(targetElementPosition.X - 100, targetElementPosition.X,
      new SineEase(),
      _targetElementClone, Canvas.LeftProperty, _flyInSpeed); //reference changed!
  sb.Children.Add(db);

  // animate the Y position
  db = CreateDoubleAnimation(targetElementPosition.Y - 50, targetElementPosition.Y,
      new SineEase(),
      _targetElementClone, Canvas.TopProperty, _flyInSpeed); //reference changed!
  sb.Children.Add(db);
  //other code is the same

public void ItemFlyOut(FrameworkElement element, Action action)

この行の後

_targetElementPosition = element.GetRelativePosition(rootElement);

これを追加します:

_element = element;

私が何をした:

このコードでは、アニメーション化された UI 要素への参照を保存し、バック アニメーションでその位置を更新します。

このコードをテストした方がよいでしょうが、問題ないようです。

于 2012-10-24T09:50:11.030 に答える