问一个淡入淡出的问题

影游 2013-10-01 09:19:57
问题比较简单,如下:

我在一个grid下面定义了多给stackPanel,很多个,

有checkbox来控制这些panel是否呈现,

我想在这些panel之间显示和隐藏增加淡入淡出效果,如何方便简洁的实现?

谢谢大家,本人是wpf的初学者,希望多写一点代码

...全文
133 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bonjour-你好 2013-10-07
  • 打赏
  • 举报
回复
引用 9 楼 boyingyou 的回复:
谢谢你,我没有使用storyboard,楼下的方法很适合我,谢谢.
楼下的也是用storyboard吧。。。
影游 2013-10-07
  • 打赏
  • 举报
回复
引用 8 楼 tang3567 的回复:
正好项目在旁边,提供我们的通用的方法供参考 把一个窗口淡出隐藏

/// <summary>
        /// 控件属性渐变动画
        /// </summary>
        /// <param name="from">初始值</param>
        /// <param name="to">目标值</param>
        /// <param name="value">对象</param>
        /// <param name="property">属性</param>
        /// <param name="mil">动画持续时长(毫秒)</param>
        public static Storyboard Animation(double from, double to, DependencyObject value, string property, int mil)
        {
            Storyboard sb = new Storyboard();
            DoubleAnimation dop = new DoubleAnimation(from, to, new TimeSpan(0, 0, 0, 0, mil));
            Storyboard.SetTarget(dop, value);
            Storyboard.SetTargetProperty(dop, new PropertyPath(property, new object[] { }));
            sb.Children.Add(dop);
            return sb;
        }
调用

Storyboard sb = Animation(1, 0, bankWindow, "Opacity", 200);
                sb.Completed += sb_Completed_Close;//动画完成后的事件,可选
                sb.Begin();
事件

void sb_Completed_Close(object sender, System.EventArgs e)
        {
            bankWindow.Close();
            bankWindow = null;
        }
感谢,后来发现提供换了个completed事件,谢谢
影游 2013-10-07
  • 打赏
  • 举报
回复
引用 7 楼 KumaPower 的回复:
你应该用 Storyboard.Stop 方法 停止动画(如果你的动画设为重复)。 http://msdn.microsoft.com/zh-cn/library/vstudio/cc190749%28v=vs.100%29.aspx PS: (是这样的效果图?)
谢谢你,我没有使用storyboard,楼下的方法很适合我,谢谢.
tang3567 2013-10-06
  • 打赏
  • 举报
回复
正好项目在旁边,提供我们的通用的方法供参考 把一个窗口淡出隐藏

/// <summary>
        /// 控件属性渐变动画
        /// </summary>
        /// <param name="from">初始值</param>
        /// <param name="to">目标值</param>
        /// <param name="value">对象</param>
        /// <param name="property">属性</param>
        /// <param name="mil">动画持续时长(毫秒)</param>
        public static Storyboard Animation(double from, double to, DependencyObject value, string property, int mil)
        {
            Storyboard sb = new Storyboard();
            DoubleAnimation dop = new DoubleAnimation(from, to, new TimeSpan(0, 0, 0, 0, mil));
            Storyboard.SetTarget(dop, value);
            Storyboard.SetTargetProperty(dop, new PropertyPath(property, new object[] { }));
            sb.Children.Add(dop);
            return sb;
        }
调用

Storyboard sb = Animation(1, 0, bankWindow, "Opacity", 200);
                sb.Completed += sb_Completed_Close;//动画完成后的事件,可选
                sb.Begin();
事件

void sb_Completed_Close(object sender, System.EventArgs e)
        {
            bankWindow.Close();
            bankWindow = null;
        }
Bonjour-你好 2013-10-02
  • 打赏
  • 举报
回复
你应该用 Storyboard.Stop 方法 停止动画(如果你的动画设为重复)。
http://msdn.microsoft.com/zh-cn/library/vstudio/cc190749%28v=vs.100%29.aspx

PS:

(是这样的效果图?)
影游 2013-10-01
  • 打赏
  • 举报
回复
引用 1 楼 KumaPower 的回复:
淡入淡出就是Opacity属性,http://msdn.microsoft.com/zh-cn/library/vstudio/ms752312.aspx
当我开始淡出动画, **.beginAnimation(); 后面我接着写 **.collapse(); 上面的淡出动画就会无效,如何解决这个问题? 谢谢补充
Bonjour-你好 2013-10-01
  • 打赏
  • 举报
回复
影游 2013-10-01
  • 打赏
  • 举报
回复
引用 3 楼 KumaPower 的回复:
collapse,需要这个的吗?方便贴一下代码吗,我修改看看
代码,我写个流程吧,我现在没有完整代码,在公司... da.from = 1; da.to = 0; **.beginAnimation(opacity,da); **.visibility = collapse; 如上,如何正确实现功能?谢谢补充...
海涵德 2013-10-01
  • 打赏
  • 举报
回复
给你一段类似代码,看看可以不? 你可以把grid_left换成你的stackpanel
海涵德 2013-10-01
  • 打赏
  • 举报
回复
   public static Storyboard madamingDoubleAnimationToWidthAndOpacity(UIElement controlToAnimation, double to_width, double o)
        {
            Storyboard sb = new Storyboard();

            DoubleAnimation da_width = new DoubleAnimation();
            DoubleAnimation da_opacity = new DoubleAnimation();

            sb.Duration = new Duration(new TimeSpan(0, 0, 0, 1, 0));

            Storyboard.SetTarget(sb, controlToAnimation);

            Storyboard.SetTargetProperty(da_width, new PropertyPath("(UIElement.Width)"));
            da_width.To = to_width;
            da_width.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 600));
            sb.Children.Add(da_width);

            //Storyboard.SetTarget(sb, controlToAnimation);
            Storyboard.SetTargetProperty(da_opacity, new PropertyPath("(UIElement.Opacity)"));
            da_opacity.To = o;
            sb.Children.Add(da_opacity);


            return sb;

        }

madamingDoubleAnimationToWidthAndOpacity(grid_left, 4, .6).Begin();
Bonjour-你好 2013-10-01
  • 打赏
  • 举报
回复
collapse,需要这个的吗?方便贴一下代码吗,我修改看看

8,737

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧