在加载时淡入时,RibbonWindow显示为黑色

时间:2012-06-09 18:12:29

标签: c# wpf xaml animation storyboard

我正在尝试在加载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显示为黑色并淡入。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

此外,这里有一个不需要在主窗口中淡出的替代方案:

  • 为您的应用制作启动画面。您可以使用内置的WPF启动画面,或使用AllowsTransparency="True"WindowStyle="None"创建常规窗口。你可以淡入(和淡出)那个闪屏,然后显示你的主窗口而不会褪色。