1

当用户在列表框中选择一个项目时,我有一个具有很好的弹出动画的应用程序。当用户单击返回按钮时,会使用飞行动画。您可以在此处查看示例:我使用与此示例相同的动画代码。一切正常,直到单击的项目部分离开屏幕底部或顶部。弹出动画将正确发生,但是当用户返回列表时,列表框会自动向上(或向下)滚动所选项目以完全显示。然而,flyin 动画将文本返回到原始(在自动滚动发生之前)位置。您可能需要下载工作示例才能完全了解我的内容。

我的问题是 - 有没有办法禁用这个自动滚动动作。消息和电子邮件等内置应用程序在选择时不会将部分可见的项目滚动到视图中。

谢谢

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 回答