wpf中用户控件更改期间的动画

Posted

技术标签:

【中文标题】wpf中用户控件更改期间的动画【英文标题】:Animation during User-control change in wpf 【发布时间】:2015-06-29 10:24:23 【问题描述】:

我正在寻找这个:

例如,我的应用程序中有 2 个用户控件:uc1.xaml 和 uc2.xaml 以及 1 个主窗口。现在,当应用程序打开时,主窗口将显示第一个用户控件,即 uc1。因此,如何在主窗口显示 uc1 时为幻灯片效果或任何其他效果设置动画。此外,当我单击 uc1 上的按钮时,主窗口从 uc1 切换到 uc2。在这一步我还需要有动画。

请帮我提供一些示例代码。

注意:我使用的是 wpf 桌面应用程序,它是“不是”winforms 应用程序。

【问题讨论】:

【参考方案1】:

要为 uc1 外观设置动画,您可以处理 MainWindow 的 Loaded 事件并从中启动任何动画:

    private void Window_Loaded(object sender, RoutedEventArgs e)
    
        ShowUserControl1().Begin();
    

    private Storyboard ShowUserControl1()
    
        // var control1 = new uc1(); uncomment it if the control does not exist

        control1.RenderTransform = new TranslateTransform();

        Root.Children.Add(im);
        // Root is your root container. In this case - Grid
        // and you have to add it only in the case if it does not exists

        Storyboard sb = new Storyboard();

        DoubleAnimation slide = new DoubleAnimation();
        slide.To = 0;
        slide.From = Root.ActualWidth;
        slide.Duration = new Duration(TimeSpan.FromMilliseconds(400));

        // Set the target of the animation
        Storyboard.SetTarget(slide, control1);
        Storyboard.SetTargetProperty(slide, new PropertyPath("RenderTransform.(TranslateTransform.X)"));

        // Kick the animation off
        sb.Children.Add(slide);

        return sb;
    

为您的按钮处理 Click 事件以对 uc2 执行相同操作。

如果你想隐藏 uc1,然后在点击按钮时显示 uc2,你必须这样做:

Storyboard sbHideUC1 = HideUserControl1(); //you will have to implement HideUserControl1() that returns Storyboard
sbHideUC1.Completed += (s, e) =>

    var sbShowUC2 = ShowUserControl2(); // you will have to implement ShowUserControl2() that returns Storyboard
    sbShowUC2.Begin();

sbHideUC1.Begin();

【讨论】:

我正在使用 wpf,如果提供 xaml 代码会很棒。我只是期待幻灯片的故事板 xaml 部分。 因此您必须将 Storyboard 存储在窗口的资源中并使用 EventTriggers 运行它。使用 EventTrigger 处理相同的事件(为 Window 加载和为按钮单击)。 java2s.com/Tutorial/VB/0290__Windows-Presentation-Foundation/… 这是示例。

以上是关于wpf中用户控件更改期间的动画的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 WPF 控件的简单 MouseOver 动画?

WPF 用户控件中的数据绑定

如何在设计模式下调试 WPF 用户控件?

WPF动态克隆和控件的属性更改

为 WPF WebBrowser 控件指定用户代理

如何在wpf C#中保持用户控件的当前状态