2011-08-04 68 views
2

昨天我沒有得到答案,但也許我對這個問題的理解不夠深入,無法形成正確的問題。故事板動畫中的錯誤?

故事是關於動畫列表框高度的動畫。下面是隨後的屏幕截圖:

一) 「中」 是一個TextBlock

Image1

b)中 「中等」 的TextBlock得到由列表框代替。用戶選擇一個項目。這啓動了ListBox.Height的動畫。動畫完成後,ListBox將被原始TextBlock替換。 (忽略數據的差異。圖像的採集是不好受的過程,那時我有渲染的幀的工作。其中一個圖像被槍殺了不同的記錄。)

Img2Img3Img4

該序列偶爾閃爍。我想知道這是怎麼回事,一段時間後,我得到這個截圖:

Img5

你看到的是後Storyboard.Completed事件被截獲的第一幀。據我所知,這是故事板的最終結果。

注:

  • 我查了可視化樹在這一瞬間,並沒有發現什麼suspiceous。

  • 這只是發生的效果之一。另一種常見的情況是帶有藍色陰影的調整大小的1行ListBox;在這種情況下,列表框上的所有元素都消失了。第三種可能性是整個屏幕上的對角紅線。

這裏是代碼定義的故事板:

private Storyboard GetDropDownAnimation(double from, double to) 
    { 
     double secs = this.IsExpanded ? 0.2 : 0.4; 
     CubicEase ease = new CubicEase() { EasingMode = EasingMode.EaseInOut }; 
     DoubleAnimation animation = new DoubleAnimation() 
     { 
      Duration = new Duration(TimeSpan.FromSeconds(secs)), 
      From = from, 
      To = to, 
      FillBehavior = FillBehavior.HoldEnd, 
      EasingFunction = ease 
     }; 
     Debug.WriteLine("Animation Height {0} -> {1}", from, to); 

     Storyboard.SetTarget(animation, this); 
     Storyboard.SetTargetProperty(animation, new PropertyPath("Height")); 

     Storyboard sb = new Storyboard(); 
     sb.Children.Add(animation); 
     return sb; 
    } 

我可以解釋其他的技巧進行(很長一段時間我認爲這個問題是存在的),但它看起來像問題的擔憂只有動畫本身。

任何人都可以解釋發生了什麼事?

回答

2

Have a look at these before you continue this way it might make your life a bit easier :)

這就是說,看看動畫(從)的初始值,看看它是否是正確的。

如果一切都失敗了,你可以從一個完全透明的列表框開始。

+1

我想你是指這些? http://silverlight.codeplex.com/ –

+0

@克勞斯約根森,是的,謝謝!我的年齡很老。我更新了鏈接。 –

+0

我查了一下我腦子裏想到的一切。從/到動畫值被打印到調試輸出,我傾銷視覺樹等一切正常。順便說一句,錯誤的「來自」的價值無法解釋觀察到的效果。 –

0

我在可能值得報告的問題上取得了一些進展。

起初,我用自己的動畫取代了Storyboard。我開始使用CompositionTarget.Rendering回調。代碼非常簡單:在回調中,您需要根據已用時間按比例更新列表框高度。我仔細檢查了每個高度變化都有一個LayoutUpdated事件,換句話說,屏幕始終處於同步狀態。 (一個驚喜。)

結果:閃爍仍然存在。

結論:故事板是無辜的。

然後我發現了一些有趣的東西: 因爲高度操作在我手中,我只是將值四捨五入到整個行高的倍數。並猜測 - 閃爍消失了!

請注意所討論的ListBox是使用引用字符串屬性的ItemsSource和DisplayMemberPath設置的。 ItemTemplate未設置。換句話說,非常標準的ListBox使用。

這不是一個答案,我知道,但我覺得它很有趣。

+0

顯然,當我的項目不適合'它會從列表框中刪除,這意味着ItemsContainer模板已損壞。 –

+0

不知道你的模板是什麼意思。我使用預定義模板的標準ListBox。 –

+0

我很有可能再次犯錯。與此同時,我發現閃爍沒有消失,變得極其罕見。而這又可能是有限數量的動畫步驟的結果。 –