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

問題は、ウィンドウが透明性をサポートしていないことです。AllowsTransparency="True"Windowタグに属性を設定できます。ただし、その属性を設定するには、も設定する必要がありますWindowStyle="None"。そうしないと、エラーが発生します。WindowStyle.None is the only valid value for WindowStyle when AllowsTransparency is true.

これらの2つの属性を設定すると、ウィンドウは適切にフェードインし、黒くなりなくなります。WindowStyleただし、に設定されているため、ウィンドウには境界線がありませんNone。次のようになります。 境界線のないウィンドウ

また、ストーリーボードの終了後にコードでWindowStyleを変更することはできません。これは、次のエラーが発生するためです。Cannot change AllowsTransparency after a Window has been shown or WindowInteropHelper.EnsureHandle has been called.

したがって、2つの選択肢があります:(メインウィンドウのフェードイン効果が必要な場合)

  • ウィンドウの独自のスタイルを作成します。通常のウィンドウのようには見えません。境界線を指定したり、最小化/最大化/閉じるボタンを作成したりする必要があります。
  • ウィンドウをフェードインし、アニメーションが完了したら、フェードインしたウィンドウの上に別の同じウィンドウを作成します。2番目のウィンドウはフェードインしませんが、最初のウィンドウとまったく同じように見えます。最初のウィンドウの上に2番目のウィンドウを表示した後、最初のウィンドウを閉じることができます。

また、メインウィンドウでフェードする必要のない代替手段は次のとおりです。

  • アプリのスプラッシュ画面を作成します。組み込みのWPFスプラッシュ画面を使用するか、およびを使用して通常のウィンドウを作成できAllowsTransparency="True"ますWindowStyle="None"。そのスプラッシュ画面をフェードイン(およびフェードアウト)し、その後、フェードインせずにメインウィンドウを表示できます。
于 2012-06-10T07:05:48.320 に答える