Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的动画在第一次加载窗口时不显示?_C#_Wpf_Animation - Fatal编程技术网

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();