wpf中的动画

wpf中的动画,wpf,Wpf,我是WPF的初学者。 我想在每个刻度上显示我的表格。 但它只显示一次。 当我调试它时,它在timer tick事件中遇到this.topmest=true,但是 它不显示窗口。 我不确定这个代码出了什么问题 public partial class Window1 : Window { public Window1() { InitializeComponent(); System.Windows.Thre

我是WPF的初学者。 我想在每个刻度上显示我的表格。 但它只显示一次。 当我调试它时,它在timer tick事件中遇到this.topmest=true,但是 它不显示窗口。 我不确定这个代码出了什么问题

public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();

                timer.Interval = new TimeSpan(0, 0, 0, 2, 0);

                timer.Tick += tick;                  

                timer.Start();                   

        }
        private void tick(object sender, EventArgs e)
        {

            this.Topmost = true;//display the form
            this.Show();

        }
    }

这应该是你想要的。我已将您希望显示给客户的WPF窗口移到另一个窗体中。然后我创建了另一个隐藏的启动窗体,并定期运行计时器来显示动画

启动形式:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="10" Width="10" ShowInTaskbar="False" Visibility="Hidden" >

    <Grid />

</Window>
循环窗口:

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="200" Width="300" Name="Main"
        ShowInTaskbar="False" WindowStyle="None" Background="Transparent" >

    <Grid Name="Base" Height="112">
        <Border BorderThickness="1" Background="Beige" BorderBrush="Black" CornerRadius="10">
            <StackPanel Margin="20">

                <CheckBox Content="Checkable" Margin="5 5 0 5" />
                <Button Content="Clickable" HorizontalAlignment="Center" />
            </StackPanel>
        </Border>

        <!-- Animation -->
        <Grid.Triggers>
            <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                <BeginStoryboard>
                    <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Main" Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)">
                            <SplineDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
                            <SplineDoubleKeyFrame KeyTime="0:0:0.0" Value="1"/>
                        </DoubleAnimationUsingKeyFrames>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Main" Storyboard.TargetProperty="(UIElement.Opacity)">
                            <SplineDoubleKeyFrame KeyTime="0:0:2" Value="1"/>
                            <SplineDoubleKeyFrame KeyTime="0:0:8" Value="0"/>
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Grid.Triggers>
    </Grid>
</Window>

这应该是你想要的。我已将您希望显示给客户的WPF窗口移到另一个窗体中。然后我创建了另一个隐藏的启动窗体,并定期运行计时器来显示动画

启动形式:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="10" Width="10" ShowInTaskbar="False" Visibility="Hidden" >

    <Grid />

</Window>
循环窗口:

<Window x:Class="WpfApplication1.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="200" Width="300" Name="Main"
        ShowInTaskbar="False" WindowStyle="None" Background="Transparent" >

    <Grid Name="Base" Height="112">
        <Border BorderThickness="1" Background="Beige" BorderBrush="Black" CornerRadius="10">
            <StackPanel Margin="20">

                <CheckBox Content="Checkable" Margin="5 5 0 5" />
                <Button Content="Clickable" HorizontalAlignment="Center" />
            </StackPanel>
        </Border>

        <!-- Animation -->
        <Grid.Triggers>
            <EventTrigger RoutedEvent="FrameworkElement.Loaded">
                <BeginStoryboard>
                    <Storyboard>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Main" Storyboard.TargetProperty="(UIElement.RenderTransform).(ScaleTransform.ScaleY)">
                            <SplineDoubleKeyFrame KeyTime="0:0:0" Value="0"/>
                            <SplineDoubleKeyFrame KeyTime="0:0:0.0" Value="1"/>
                        </DoubleAnimationUsingKeyFrames>
                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName="Main" Storyboard.TargetProperty="(UIElement.Opacity)">
                            <SplineDoubleKeyFrame KeyTime="0:0:2" Value="1"/>
                            <SplineDoubleKeyFrame KeyTime="0:0:8" Value="0"/>
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </Grid.Triggers>
    </Grid>
</Window>

我对你想做什么有点困惑。表单正在初始化并在InitializeComponent方法期间显示。你的计时器所做的就是把它变成最上面的窗口。这是一个完全不相关的建议,因为你提到你是WPF的新手,不要使用新的TimeSpan0,0,0,2,0,使用TimeSpan.FromSeconds2。它使代码更容易阅读:我对您试图做的事情有点困惑。表单正在初始化并在InitializeComponent方法期间显示。你的计时器所做的就是把它变成最上面的窗口。这是一个完全不相关的建议,因为你提到你是WPF的新手,不要使用新的TimeSpan0,0,0,2,0,使用TimeSpan.FromSeconds2。它使代码更容易阅读:非常感谢您的回复。我希望该窗口在用户登录后每隔20分钟弹出一次,并且不会永远自动隐藏。@LillyW我已经调整了我的答案,以考虑您在评论中提供的其他信息。“它能做你想做的吗?”LillyW没问题,我把它当作一个挑战,它给了我一些东西,让我在院子里干活的时候好好咀嚼。如果答案对你有效,请不要忘记接受它。这个应用程序使用了大量内存。我的意思是每20分钟内存使用量就会增加1000K。你能告诉我如何解决内存泄漏问题吗;循环结束后关闭;这将删除对表单的任何引用,并允许垃圾收集器收集表单。如果不起作用,尝试添加GC.Collect;在无效声明之后。非常感谢您的回复。我希望该窗口在用户登录后每隔20分钟弹出一次,并且不会永远自动隐藏。@LillyW我已经调整了我的答案,以考虑您在评论中提供的其他信息。“它能做你想做的吗?”LillyW没问题,我把它当作一个挑战,它给了我一些东西,让我在院子里干活的时候好好咀嚼。如果答案对你有效,请不要忘记接受它。这个应用程序使用了大量内存。我的意思是每20分钟内存使用量就会增加1000K。你能告诉我如何解决内存泄漏问题吗;循环结束后关闭;这将删除对表单的任何引用,并允许垃圾收集器收集表单。如果不起作用,尝试添加GC.Collect;在null语句之后。
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        AllowsTransparency = true;
    }
}