我有一个窗口,它打算在显示时淡入。第一次使用时,动画不运行。在随后的使用中,它工作正常。这是我实例化以显示某些内容的请求者-我不会保留它并重用实例。我实例化请求者,设置各种属性,例如 .Top 和 .Left,然后调用 ShowDialog。在构造函数中,我正在设置 DataContext。如果我将其注释掉(因为另一个线程建议这可能是由于在播放动画时设置数据上下文引起的),那么它就解决了这个问题。然而,直到调用构造函数之后,我才调用 ShowDialog。而且因为每次我想使用它时都会实例化一个新实例,所以我不明白为什么只有在第一次运行时才会出现问题。
就好像第一次加载程序集一样,但是 VS 输出窗口没有显示这种情况。
窗口从零不透明度开始,因此通过变得可见它显示动画正在被触发,它只是没有时间运行。如果我将 BeginTime 设置为半秒,那么它每次都可以工作,但显然它在响应按钮按下时会更加缓慢,并且在速度较慢的机器上可能仍然不够用。
我在 XAML 中定义动画
<Window.Triggers>
<EventTrigger RoutedEvent="Window.Loaded">
<BeginStoryboard>
<Storyboard Name="FormFade">
<DoubleAnimation Name="FormFadeAnimation"
Storyboard.TargetProperty="(Window.Opacity)"
From="0.0" To="1.0" Duration="0:0:0.25"
AutoReverse="False" RepeatBehavior="1x"
BeginTime="0:0:0"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Window.Triggers>
是否有更合适的事件触发?我尝试了 Window.Initialized 和 Window.IsVisibleChanged 但似乎都不是路由事件,因此在解析 XAML 时它们会引发异常。
我可以将其全部转移到代码后面(因为无论如何都必须在那里进行淡出),但如果可以的话,我更喜欢将东西放在 xaml 中。
我可以从 Dispatcher.BeginInvoke 分配 DataContext,但这看起来很混乱,而且将来要填充的字段可能会在动画之后发生并且看起来很糟糕,所以我只是将问题隐藏到以后。
有人对此有任何想法吗?