0

我试图在加载 RibbonWindow 时显示淡入动画。

这是我所做的:

<ribbon:RibbonWindow.Resources>
    <Storyboard x:Key="FadeInOnLoad">
        <DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:2" FillBehavior="HoldEnd" >
            <DoubleAnimation.EasingFunction>
                <QuinticEase EasingMode="EaseIn"/>
            </DoubleAnimation.EasingFunction>
        </DoubleAnimation>
    </Storyboard>
</ribbon:RibbonWindow.Resources>
<ribbon:RibbonWindow.Triggers>
    <EventTrigger RoutedEvent="FrameworkElement.Loaded">
        <BeginStoryboard Storyboard="{StaticResource FadeInOnLoad}"/>
    </EventTrigger>
</ribbon:RibbonWindow.Triggers>

但是,RibbonWindow 并没有从透明开始,而是显示为黑色并逐渐淡入。

什么可能导致这种行为,我该如何解决?

4

1 回答 1

1

问题是您的 Window 不支持透明度。您可以AllowsTransparency="True"在 Window 标签上设置属性。但是,为了设置该属性,您还需要设置WindowStyle="None",否则会出现错误WindowStyle.None is the only valid value for WindowStyle when AllowsTransparency is true.

一旦你设置了这两个属性,你的窗口就会很好地淡入,并且不再是黑色的。但是,窗口将没有边框,因为WindowStyle设置为None. 它看起来像这样: 没有边框的窗口

此外,在情节提要完成后,您将无法在代码中更改 WindowStyle,因为您将收到以下错误:Cannot change AllowsTransparency after a Window has been shown or WindowInteropHelper.EnsureHandle has been called.

所以,你有两个选择:(如果你想要主窗口的淡入效果)

  • 为窗口制作自己的样式。它看起来不像一个常规窗口,您需要指定它的边框,为其创建最小化/最大化/关闭按钮等。
  • 淡入窗口,动画完成后,在淡入窗口的顶部创建另一个相同的窗口。第二个窗口不会淡入,但看起来与第一个窗口完全一样。在第一个窗口的顶部显示第二个窗口后,您可以关闭第一个窗口。

此外,这是一个不需要在主窗口中淡入淡出的替代方法:

  • 为您的应用制作启动画面。您可以使用内置的 WPF 启动画面,或使用AllowsTransparency="True"和创建一个常规窗口WindowStyle="None"。您可以淡入(和淡出)该初始屏幕,然后在不淡入的情况下显示您的主窗口。
于 2012-06-10T07:05:48.320 回答