0

これは私の最初のWPFプロジェクトです。バナー型のPNGを縦に積み上げて、ローリングクレジット効果を出そうとしています。

私の現在のアプローチは、StackPanelにたくさんの画像を入れることです。各画像は約1024x150で、約30枚の画像があります。それらは垂直に積み重ねられます。

StackPanelを0,200から開始したので、ほとんどが画面外にあります。次に、ストーリーボード(Blendで作成)を使用して、画面の外までY軸を上に移動します。アニメーションは開始されますが、問題は、元々画面外にあったStackPanelの部分がペイントされず、途切れたままになることです。StackPanelの最初に表示された領域のみがアニメートされます。

StackPanelを塗り直す必要があるように感じます。このアプローチはこれまでに機能するのでしょうか、それともまったく異なることをする必要がありますか?

XAML、WindowとWindow.Triggersを省略:

<Window.Resources>
    <Storyboard x:Key="sb_HR">
        <DoubleAnimationUsingKeyFrames 
                    BeginTime="00:00:00" 
                    Storyboard.TargetName="StackPanel1"
                    Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
            <SplineDoubleKeyFrame KeyTime="00:00:30" Value="-1950"/>
        </DoubleAnimationUsingKeyFrames>
    </Storyboard>
</Window.Resources>


<Grid x:Name="LayoutRoot">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="1024" />
    </Grid.ColumnDefinitions>        
    <StackPanel   Name="StackPanel1" Margin="0,0,0,0" RenderTransformOrigin="0.5,0.5">
        <StackPanel.RenderTransform>
            <TransformGroup>
                <ScaleTransform ScaleX="1" ScaleY="1"/>
                <SkewTransform AngleX="0" AngleY="0"/>
                <RotateTransform Angle="0"/>
                <TranslateTransform X="0" Y="0"/>
            </TransformGroup>
        </StackPanel.RenderTransform>
        <Image Margin="0,50,0,0" Source="title.png"  x:Name="title" Height="150" VerticalAlignment="Top" Stretch="Uniform"></Image>
        <Image Margin="0,50,0,0" Source="1.png" x:Name="V1_L1" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image>
        <Image Margin="0,50,0,0" Source="2.png" x:Name="V1_L2" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image>
        <Image Margin="0,50,0,0" Source="3.png" x:Name="V1_L3" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image>
        <Image Margin="0,50,0,0" Source="4.png" x:Name="V1_L4" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image>
        <Image Margin="0,50,0,0" Source="5.png" x:Name="V1_L5" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image>
        <Image Margin="0,50,0,0" Source="6.png" x:Name="V1_L6" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image>
        <Image Margin="0,50,0,0" Source="7.png" x:Name="V1_L7" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image>
        <Image Margin="0,50,0,0" Source="8.png" x:Name="V1_L8" Height="150" VerticalAlignment="Top" Stretch="Uniform" ></Image>
    </StackPanel>
</Grid>

編集: ClipToBoundsを見つけて、falseに設定しようとしましたが、すでにfalseです。MSDNの誰かが私と同じ問題を抱えています。http ://social.msdn.microsoft.com/Forums/en-US/wpf/thread/5764645e-cb4f-4137-a525-4e8698ee43b6-まだ解決策。

4

2 に答える 2

2

私はあなたが試すことができる2つのことを見ます:

  1. StackPanelの周りのスクロールバーが無効になっているScrollViewerを使用します。残念ながら、スクロールオフセットを直接アニメーション化することはできないため、コードビハインドでタイマーのようなものを作成し、ScrollToVerticalOffset()を定期的に呼び出す必要があります。

  2. StackPanelをCanvasに配置し、RenderTransformsの代わりにCanvas.Top(StackPanelに設定)をアニメートしてみてください。

必要に応じてコードサンプルを提供します。

アンドレイ

于 2009-07-05T14:18:02.113 に答える
2

Andrejに同意します。スクロールバーが無効になっている、新しいリストボックスタイプを作成するだけです。

スクロールオフセットをアニメーション化できます。これは、現在作成しているカスタムコントロールで発生します。これは、リストボックスのクラスの関数にあります。


Duration animationDuration = new Duration(new TimeSpan(0, 0, 0, 0, _scrollSpeed));
DoubleAnimation animateHscroll = new DoubleAnimation(thisScrollViewer.HorizontalOffset, TargetHorizontalOffset, animationDuration);

thisScrollViewer.BeginAnimation(HorizontalScrollOffsetProperty, animateHscroll);

于 2009-09-11T17:33:39.817 に答える