2

子としてUserControlsを持つStackPanelがあります。子供の身長を1秒で0から100に上げるストーリーボードアニメーションを適用して、スムーズなスライドダウンアニメーションを作成したいと思います。これは、新しい子がStackPanelに追加されたときに呼び出されます- StackPanel1.children.Add(usercontrol1)。StackPanelの子はUserControlsであるため、DataTemplatesを使用したくありません。以下は、私が言っていることのレイアウト例です。

レイアウト例

作り方がわからないので、誰かがこれを作るのを手伝ってくれませんか。ありがとうございました。

4

2 に答える 2

2

StoryBoardのオブジェクトをターゲットにする必要があります。

private void Button_Click(object sender, RoutedEventArgs e)
{
    var usercontrol1 = new Label();
    usercontrol1.Background = new SolidColorBrush(Colors.Red);
    usercontrol1.Content = "Hello";
    usercontrol1.Name = "UniqueName" + System.Guid.NewGuid().ToString("N");
    RegisterName(usercontrol1.Name, usercontrol1);

    StackPanel1.Children.Add(usercontrol1);
    // Create a DoubleAnimation to animate the width of the button.
    DoubleAnimation myDoubleAnimation = new DoubleAnimation();
    myDoubleAnimation.From = 0;
    myDoubleAnimation.To = 100;
    myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(1000));

    // Configure the animation to target the button's Width property.
    Storyboard.SetTargetName(myDoubleAnimation, usercontrol1.Name);
    Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(Button.HeightProperty));

    // **Set the Target Object for the Animation.**
    Storyboard.SetTarget(myDoubleAnimation, usercontrol1);

    // Create a storyboard to contain the animation.
    Storyboard myWidthAnimatedButtonStoryboard = new Storyboard();
    myWidthAnimatedButtonStoryboard.Children.Add(myDoubleAnimation);
    myWidthAnimatedButtonStoryboard.Begin(usercontrol1);

}
于 2012-12-17T20:27:32.647 に答える
1

まあ、それは多かれ少なかれ上のコメントに書かれたリンクからのコピーペーストです。まず、コントロール(たとえば、usercontrol1)を作成し、それを参照するストーリーボードに一意の名前を付ける必要があります。

編集:以下は、機能する単純なアプリケーションのコードです。

XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="800"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <StackPanel Name="StackPanel1">

    </StackPanel>
    <Button Grid.Row="1" Click="Button_Click">

    </Button>
</Grid>

とコードビハインド:

private void Button_Click(object sender, RoutedEventArgs e)
    {
        var usercontrol1 = new Label();
        usercontrol1.Background = new SolidColorBrush(Colors.Red);
        usercontrol1.Content = "Hello";
        usercontrol1.Name = "UniqueName" + System.Guid.NewGuid().ToString("N");
        RegisterName(usercontrol1.Name, usercontrol1);

        StackPanel1.Children.Add(usercontrol1);
        // Create a DoubleAnimation to animate the width of the button.
        DoubleAnimation myDoubleAnimation = new DoubleAnimation();
        myDoubleAnimation.From = 0;
        myDoubleAnimation.To = 100;
        myDoubleAnimation.Duration = new Duration(TimeSpan.FromMilliseconds(1000));

        // Configure the animation to target the button's Width property.
        Storyboard.SetTargetName(myDoubleAnimation, usercontrol1.Name);
        Storyboard.SetTargetProperty(myDoubleAnimation, new PropertyPath(Button.HeightProperty));

        // Create a storyboard to contain the animation.
        Storyboard myWidthAnimatedButtonStoryboard = new Storyboard();
        myWidthAnimatedButtonStoryboard.Children.Add(myDoubleAnimation);
        myWidthAnimatedButtonStoryboard.Begin(usercontrol1);

    }
于 2012-07-19T12:23:41.463 に答える