2012-10-23 40 views
1

我有一個應用程序,當用戶選擇列表框中的一個項目時,有一個很好的彈出動畫。當用戶點擊後退按鈕時,會使用flyin動畫。您可以看到示例here: 我正在使用與此示例相同的動畫代碼。一切工作正常,直到點擊項目部分離開屏幕的底部或頂部。彈出動畫將正常發生,但當用戶返回到列表時,列表框自動將選定項目向上(或向下)滾動以完全顯示。蒼蠅動畫然而將文本返回到原始位置(在發生自動滾動之前)。您可能需要下載工作示例以充分了解我所關注的內容。如何停止WP7 ListBox自動滾動點擊項目到視圖中?

我的問題是 - 是否有一種方法來禁用此自動滾動操作。內置應用程序(如消息和電子郵件)在選擇時不會將部分可見項目滾動到視圖中。

感謝

回答

1

我不知道如何禁用自動滾動動作,但我更喜歡的代碼速戰速決:

在課堂ItemFlyInAndOutAnimations

添加一個字段

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

in 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元素並更新它的位置n在後面動畫。

你最好測試這段代碼,但它似乎沒問題。

+0

非常好。解決問題! – AndrewJE