我有一个wpf进度窗口,定义如下:
<Window x:Class="NeoinfoXmlEditor.WPF.Forms.ProgressDisplayForm"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="84" Width="505" x:Name="root" WindowStartupLocation="CenterScreen">
<Grid>
<ProgressBar Height="15" x:Name="MessageProgessBar" HorizontalAlignment="Stretch" VerticalAlignment="Top" Maximum="10000" Margin="10,2,10,2" >
<ProgressBar.Triggers>
<EventTrigger RoutedEvent="ProgressBar.Loaded">
<BeginStoryboard>
<Storyboard x:Name="sb">
<DoubleAnimation Storyboard.TargetName="MessageProgessBar"
Storyboard.TargetProperty="Value"
From="0" To="10000" Duration="0:0:45"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</ProgressBar.Triggers>
</ProgressBar>
<TextBlock HorizontalAlignment="Center" VerticalAlignment="Bottom" Margin="5" Text="{Binding ElementName=root, Path=Message}" />
</Grid>
</Window>
文件背后的代码如下:
public partial class ProgressDisplayForm : Window
{
public static readonly DependencyProperty MessageProperty =
DependencyProperty.Register("Message", typeof (string), typeof (ProgressDisplayForm));
public string Message
{
get { return (string) GetValue(MessageProperty); }
set { SetValue(MessageProperty, value); }
}
public ProgressDisplayForm()
{
InitializeComponent();
}
public void DisplayWindow()
{
this.Show();
this.BeginStoryboard(sb);
}
}
您可以看到我尝试以两种方式启动progressBar动画: - 在ProgressBar.Loaded上使用EventTrigger - 从后面的代码,明确
问题是 - 两者都不起作用。
注意 - 我需要打开此窗口并将动画作为模态窗口启动,因此 ShowDialog()不是na选项。此外,我尝试使用DispatcherTimer,但它在某种程度上不起作用,在使用System.Timers.Timer类时使用this.Dispatcher.Invoke()。
我正在从主应用程序窗口调用DisplayWindow()方法。
我错过了什么?
提前致谢
答案 0 :(得分:0)
我无法重现你的问题,你的XAML动画工作得很好!尝试将你的XAML代码复制到一个没有代码隐藏的新项目。我试过了,工作得很好:D
答案 1 :(得分:0)
我发现了问题所在 - 我调用了NewWindow.Show(),然后继续进行一些高CPU计算,假设如果不使用ShowDialog()调用新窗口将在单独的线程上。
我使用BackgroundWorker修复了它!
无论如何,感谢您的帮助!