C# 为什么我的动画在第一次加载窗口时不显示?
我有一个窗口,它的基本动画设置为在加载窗口时运行 以下是窗口中的动画:C# 为什么我的动画在第一次加载窗口时不显示?,c#,wpf,animation,C#,Wpf,Animation,我有一个窗口,它的基本动画设置为在加载窗口时运行 以下是窗口中的动画: <Window.Triggers> <EventTrigger RoutedEvent="Loaded"> <BeginStoryboard> <Storyboard Duration="00:00:2" Storyboard.TargetProperty="Opacity"> <Double
<Window.Triggers>
<EventTrigger RoutedEvent="Loaded">
<BeginStoryboard>
<Storyboard Duration="00:00:2" Storyboard.TargetProperty="Opacity">
<DoubleAnimation From="0" To="1"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
这在从ICommand调用的函数中
当你第一次打开窗户时,它似乎在一秒钟内什么也不做,然后突然窗户出现了。但是,在随后打开窗口的所有时间,都会播放动画。为什么动画不能在第一次打开时播放?我应该换什么
PS,这并不是因为新窗口在旧窗口的后面,我尝试了其他动画,它从屏幕右侧滑入,并尝试使新窗口比新窗口小
编辑:
ICommand回应评论:
private ICommand openPreferences;
public ICommand OpenPreferences
{
get
{
if (openPreferences == null)
{
openPreferences = new RelayCommand(OpenPreferencesEx, null);
}
return openPreferences;
}
}
private void OpenPreferencesEx(object p)
{
PreferencesWindow PrefWindow = new PreferencesWindow();
PreferencesWindowViewModel PrefWindowViewModel = new PreferencesWindowViewModel();
PrefWindow.DataContext = PrefWindowViewModel;
PrefWindow.Owner = p as MainWindow;
PrefWindow.ShowDialog();
您在哪里初始化
ICommand
?代码级别存在一些问题,否则一切对我来说都很好。添加了代码以回答第一个注释。您使用的是.NET的哪个版本,RelayCommnd的实现是什么?在.NET4.6.1上,使用一个简单的ICommand实现,只调用提供的操作(否则代码与您的完全相同),我无法重现这个问题。这让我想知道是.NET版本、OS版本还是RelayCommand的实现是一个因素。我无法仅使用您在此处提供的信息重现您的问题。请编辑您的问题,使其包含一个可靠地再现问题的好问题。我怀疑真正发生的一切是,在您的计算机上,由于JITting、XAML加载,以及动画的发生,都会有一些延迟,但当UI线程能够呈现动画时,就不会有延迟了。您是否尝试过延长持续时间(例如,延长到10秒或更长),以查看UI线程是否最终赶上并开始向您显示已经开始的动画?
private ICommand openPreferences;
public ICommand OpenPreferences
{
get
{
if (openPreferences == null)
{
openPreferences = new RelayCommand(OpenPreferencesEx, null);
}
return openPreferences;
}
}
private void OpenPreferencesEx(object p)
{
PreferencesWindow PrefWindow = new PreferencesWindow();
PreferencesWindowViewModel PrefWindowViewModel = new PreferencesWindowViewModel();
PrefWindow.DataContext = PrefWindowViewModel;
PrefWindow.Owner = p as MainWindow;
PrefWindow.ShowDialog();