在Windows Phone中保留AnList LongListSelectorItem前景
在过去的几天里,我一直在努力为持有物品的情况获得一个漂亮的前景动画效果。
Item模板如下所示:
我尝试了多种方法,但我没有设法从其中任何一个获得结果。
我遇到了这个很好的MSDNpost ,其中显示了多个示例,但它们都不能与我的案例完全匹配,因为我希望在DataTemplate
设置TextBlock
Foregrounds动画,引用TextBlock
,所以我在访问特定控件时遇到问题模板。
例如,我尝试了这种方法:
然后从Hold
事件处理程序触发它:
var storyboard = Resources["ItemHoldAnimation"] as Storyboard; storyboard.Begin();
但它失败了,因为TargetName="SubjectTextBlock"
无法访问,因为它在DataTemplate
…
我也尝试过一种我用WPF和EventTriggers
找到的方法,如下所示:
...
但它给了COMexception……
MS.Internal.WrappedException: Error HRESULT E_FAIL has been returned from a call to a COM component. ---> System.Exception: Error HRESULT E_FAIL has been returned from a call to a COM component.
当LongListSelector
项被保持时,很多只是动画字体…
解决这个问题的方法是什么?
您应该在DataTemplate中定义Storyboard,还需要修改目标proeprty,因为ColorAnimation适用于Color属性而不是画笔。 最后还需要设置IsZoomEnabled="False"
,因为否则ContextMenu实现会获取元素的快照并在上下文菜单打开时显示此静态图像,因此动画将不可见(另一种方法是修改源代码ContextMenu在动画完成后延迟打开上下文菜单)这样的事情应该有效:
这是hold方法:
private void OnLongListSelectorItemHold(object sender, GestureEventArgs e) { FrameworkElement fe = sender as FrameworkElement; var storyboard = fe.Resources["ItemHoldAnimation"] as Storyboard; storyboard.Begin(); } private void ContextMenu_OnClosed(object sender, RoutedEventArgs e) { ContextMenu eleme=sender as ContextMenu; FrameworkElement fe = eleme.Owner as FrameworkElement; var storyboard = fe.Resources["MenuClosedAnimation"] as Storyboard; storyboard.Begin(); }