WP7 - 通过代码(而不是 XAML)淡化用户控件

本文关键字:XAML 控件 用户 代码 WP7 | 更新日期: 2023-09-27 17:56:45

我正在尝试弹出一个用户控件,然后将其淡出超过 3 秒。我正在尝试使用以下代码,但是在Popup.LoadedEvent和Splash.LoadedEvent的分配中,我一直得到不正确的参数值。我做错了什么?

Splash s = new Splash();
            DoubleAnimation fade = new DoubleAnimation()
            {
                Duration = new Duration(TimeSpan.FromMilliseconds(3000)),
                From = 1.0,
                To = 0.0,
                RepeatBehavior = new RepeatBehavior(1)
            };
            fade.Completed += new EventHandler(fade_Completed);
            this.popup = new Popup();
            this.popup.Child = s;
            EventTrigger et = new EventTrigger();
            et.RoutedEvent = Popup.LoadedEvent;
            Storyboard sb = new Storyboard();
            sb.Children.Add(fade);
            BeginStoryboard bs = new BeginStoryboard() { Storyboard = sb };
            et.Actions.Add(bs);
            this.popup.Triggers.Add(et);
            this.popup.IsOpen = true;

我似乎也无法弄清楚在哪里/如何设置目标属性。

编辑:我能够使用@Titan2782提供的链接获得答案。我已经在下面的答案中发布了它。

WP7 - 通过代码(而不是 XAML)淡化用户控件

查看它

http://www.windowsphonegeek.com/articles/wp7-transitions-in-depth--custom-transitions 有一些代码来处理情节提要并设置目标属性。

您应该查看Windows Phone工具包中的转换内容: http://blogs.msdn.com/b/wfaught/archive/2010/11/15/transitions.aspx

它只有几行来获得这些过渡。

您可能在这里遇到一些问题,因为您使用的是弹出窗口,而可视化树中不存在弹出窗口?

我有一个在 vb 中带有按钮的示例,应该不难翻译成 c#:

Dim Fade As New Animation.DoubleAnimation
Fade.From = 0.5
Fade.To = 1
Fade.Duration = TimeSpan.FromSeconds(3)
Animation.Storyboard.SetTarget(Fade, button)
Animation.Storyboard.SetTargetProperty(Fade, New PropertyPath(Button.OpacityProperty))
Dim sb As New Animation.Storyboard
sb.Children.Add(highlight)
sb.Begin()

我想这也适用于弹出窗口。

多亏@Titan2782答案,我才能弄清楚

    Splash s = new Splash();
                DoubleAnimation fade = new DoubleAnimation()
                {
                    Duration = new Duration(TimeSpan.FromMilliseconds(4000)),
                    From = 1.0,
                    To = 0.0,
                    RepeatBehavior = new RepeatBehavior(1)
                };
                fade.Completed += new EventHandler(fade_Completed);
                this.popup = new Popup();
                this.popup.Child = s;
                Storyboard.SetTargetProperty(fade, new PropertyPath(UIElement.OpacityProperty));
                sb.Children.Add(fade);
                Storyboard.SetTarget(sb, s);           
                this.popup.IsOpen = true;
                sb.Begin();