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