当用户选择列表框中的项目时,我有一个具有漂亮的弹出动画的应用程序。当用户单击后退按钮时,将使用flyin动画。您可以看到示例here: 我使用与此示例相同的动画代码。一切正常,直到被点击的项目部分偏离屏幕的底部或顶部。弹出动画将正确发生,但当用户返回列表时,列表框会自动向上(或向下)滚动所选项目以完全在视图中。然而,flyin动画将文本返回到原始(在自动滚动发生之前)位置。您可能需要下载工作样本以完全了解我的目的。
我的问题是 - 有没有办法禁用此自动滚动操作。消息和电子邮件等内置应用程序在选中时不会将部分可见的项目滚动到视图中。
由于
答案 0 :(得分:1)
我不知道如何禁用自动滚动操作,但我可以快速修复该代码:
在班级ItemFlyInAndOutAnimations
添加字段
private FrameworkElement _element; //let's consider the line is 266
{p}在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元素的引用保存并更新它在背景动画上的位置。
你最好测试一下这段代码,但似乎没问题。