【问题标题】:Change UWP FlipView更改 UWP 翻转视图
【发布时间】:2017-03-22 18:09:39
【问题描述】:

在 UWP Flipview 控件中更改图像时是否可以更改动画效果?与其滑入,我更喜欢交叉淡入淡出效果。

我没有找到办法,但我想确认一下。任何帮助表示赞赏。

谢谢。

【问题讨论】:

    标签: animation uwp uwp-xaml flipview


    【解决方案1】:

    您应该能够在后面的代码中手动覆盖动画。首先,使用UseTouchAnimationsForAllNavigation="False" 禁用内置动画。

        <FlipView x:Name="FlipView" UseTouchAnimationsForAllNavigation="False" SelectionChanged="Selector_OnSelectionChanged" >
            <FlipView.Items>
                <Grid Background="Red"></Grid>
                <Grid Background="Blue"></Grid>
                <Grid Background="Green"></Grid>
            </FlipView.Items>
        </FlipView>
    

    然后,在代码隐藏中运行故事板:

        private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.AddedItems.Count <= 0) return;
            if (e.RemovedItems.Count <= 0) return;
    
            var newSelectedItem = FlipView.ItemContainerGenerator.ContainerFromItem(e.AddedItems[0]) as FlipViewItem;
            var previousSelectedItem = FlipView.ItemContainerGenerator.ContainerFromItem(e.RemovedItems[0]) as FlipViewItem;
    
            if (newSelectedItem == null) return;
            if (previousSelectedItem == null) return;
    
            var duration = new Duration(TimeSpan.FromMilliseconds(500));
    
            var hideAnimation = new DoubleAnimation
            {
                From = 1.0,
                To = 0.0,
                AutoReverse = false,
                Duration = duration
            };
    
            var hideSb = new Storyboard();
            hideSb.Children.Add(hideAnimation);
            Storyboard.SetTargetProperty(hideSb, "Opacity");
            Storyboard.SetTarget(hideSb, previousSelectedItem);
    
            hideSb.Begin();
    
            var showAnimation = new DoubleAnimation
            {
                From = 0.0,
                To = 1.0,
                AutoReverse = false,
                Duration = duration
            };
    
            var showSb = new Storyboard();
            showSb.Children.Add(showAnimation);
            Storyboard.SetTargetProperty(showSb, "Opacity");
            Storyboard.SetTarget(showSb, newSelectedItem);
    
            showSb.Begin();
        }
    

    【讨论】:

    • 谢谢,可以在xaml中使用吗?
    【解决方案2】:

    没有仔细看,但在默认模板 (https://msdn.microsoft.com/en-us/library/windows/apps/mt299124.aspx) 中有一个用于项目的水平堆栈面板和一个滚动查看器,所以我真的没有办法做到这一点。

    我个人认为,当用户按下按钮或其他东西时,编写一个自定义控件来淡入淡出集合的项目会更容易

    【讨论】:

    • 如果我没有收到任何好的方法,这就是我计划做的。然而,由于 Mikael 给了我一个很好的方法,这就是我正在进行的方式。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 2014-09-27
    • 2016-08-29
    • 2021-03-08
    • 2021-08-13
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多