Winrt phone 8.1 StackPanel可见性动画



我有一个垂直的stackpanel,其中几乎有10个textblocks,其可见性在单击按钮时发生变化,我们可以在stackpanel的可见性上应用动画吗?意思是当它崩溃或可见时,它显示动画,就像它从顶部打开一样。

我不知道这是否可能。或容易实现或不容易。

这是一个使用AddDelete过渡动画的工作示例:https://www.dropbox.com/l/9hcyf0V4q6qimmpvwal7no

解释:你可以应用各种各样的动画来达到你想要的效果,它可以变得相当复杂。我发现最简单的解决方案是使用AddDeleteThemeTransition动画。首先,您需要引用Media。Windows.UI.Xaml下的动画:

using Windows.UI.Xaml.Media.Animation;

你需要维护你的文本块的集合,而不是改变它们的可见性,你实际上是把它们从stackpanel中完全移除。

模块级别变量:

List<TextBlock> textblocks = new List<TextBlock>();

在这里,您可以编程地将文本框添加到列表中。

        Transition addDelete = new AddDeleteThemeTransition();
        for (int i = 1; i < 10; i++)
        {
            TextBlock textBlock = new TextBlock();
            textBlock.Transitions = new TransitionCollection();
            textBlock.Transitions.Add(addDelete);
            textBlock.Text = "Test Textblock " + i;
            //set font size, style, etc...
            textblocks.Add(textBlock);
        }

一旦你在文本块上有了AddDeleteThemeTransition,你可以执行以下操作:

    private async Task showTextBlocks()
    {
        foreach (TextBlock tb in textblocks)
        {
            stackPanel.Children.Add(tb);
            await Task.Delay(50); //If you want them to stagger on... remove if not to stagger
        }
    }
    private async Task hideTextBlocks()
    {
        //remove the textblocks in reverse order
        for (int i = textblocks.Count - 1; i >= 0; i--)
        {
            TextBlock tb = textblocks[i];
            stackPanel.Children.Remove(tb);
            await Task.Delay(50); //if you want them to stagger off... remove if not to stagger
        }
    }

因为textblock元素应用了AddDeleteThemeTransition过渡,所以当它们被添加或从堆栈面板中移除时,它们会产生动画。

这将给出一个动画…对它没有太多的控制,但你可以随意使用它,看看它是否能满足你的需要。

关于其他转换类型的列表,您可以在这里查看Microsoft Documentation

我相信您可以使用xaml实现您想要的。你需要的是一个故事板和一个EventTriggerBehavior。如果你有兴趣,我可以把一个示例代码。

最新更新