Compartir a través de


Cómo: Definir un ámbito de nombres

Para animar con Storyboard en código, debe crear un objeto NameScope y registrar los nombres de los objetos de destino para el elemento que posee ese ámbito de nombres. En el ejemplo siguiente se crea un objeto NameScope para myMainPanel. Se agregan dos botones, button1 y button2, al panel, y se registran sus nombres. Se crean varias animaciones y un Storyboard. El método Begin del guión gráfico se utiliza para iniciar las animaciones.

Dado que button1, button2 y myMainPanel comparten el mismo ámbito de nombres, cualquiera de ellos se puede utilizar con el método StoryboardBegin para iniciar las animaciones.

Ejemplo


Imports System
Imports System.Windows
Imports System.Windows.Controls
Imports System.Windows.Media
Imports System.Windows.Media.Animation
Imports System.Windows.Shapes

Namespace Microsoft.Samples.Animation.AnimatingWithStoryboards




    Public Class ScopeExample
        Inherits Page

        Private myStoryboard As Storyboard
        Private myMainPanel As StackPanel
        Private button1, button2 As Button

        Public Sub New()

            Me.Background = Brushes.White
            myMainPanel = New StackPanel()

            ' Create a name scope for the stackpanel. 
            NameScope.SetNameScope(myMainPanel, New NameScope())

            myMainPanel.Background = Brushes.Orange

            button1 = New Button()
            button1.Name = "Button1"

            ' Register button1's name with myMainPanel.
            myMainPanel.RegisterName(button1.Name, button1)
            button1.Content = "Button 1"
            AddHandler button1.Click, AddressOf button1Clicked
            myMainPanel.Children.Add(button1)

            button2 = New Button()
            button2.Name = "Button2"

            ' Register button2's name with myMainPanel.
            myMainPanel.RegisterName(button2.Name, button2)
            button2.Content = "Button 2"
            AddHandler button2.Click, AddressOf button2Clicked
            myMainPanel.Children.Add(button2)


            ' Create some animations and a storyboard.
            Dim button1WidthAnimation As New DoubleAnimation(300, 200, New Duration(TimeSpan.FromSeconds(5)))
            Storyboard.SetTargetName(button1WidthAnimation, button1.Name)
            Storyboard.SetTargetProperty(button1WidthAnimation, New PropertyPath(Button.WidthProperty))

            Dim button2WidthAnimation As New DoubleAnimation(300, 200, New Duration(TimeSpan.FromSeconds(5)))
            Storyboard.SetTargetName(button2WidthAnimation, button2.Name)
            Storyboard.SetTargetProperty(button2WidthAnimation, New PropertyPath(Button.WidthProperty))

            Dim heightAnimationWithoutTarget As New DoubleAnimation(300, 200, New Duration(TimeSpan.FromSeconds(5)))
            Storyboard.SetTargetProperty(heightAnimationWithoutTarget, New PropertyPath(FrameworkElement.HeightProperty))

            myStoryboard = New Storyboard()
            myStoryboard.Children.Add(button1WidthAnimation)
            myStoryboard.Children.Add(button2WidthAnimation)
            myStoryboard.Children.Add(heightAnimationWithoutTarget)

            Me.Content = myMainPanel

        End Sub


        Private Sub button1Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)

            ' Starts the animations. The animation without a specified 
            ' target name, heightAnimationWithoutTarget, is applied to
            ' myMainPanel.
            myStoryboard.Begin(myMainPanel)

        End Sub

        Private Sub button2Clicked(ByVal sender As Object, ByVal args As RoutedEventArgs)

            ' Starts the animations. The animation without a specified 
            ' target name, heightAnimationWithoutTarget, is applied to
            ' button2.
            myStoryboard.Begin(button2)

        End Sub

    End Class


End Namespace
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace Microsoft.Samples.Animation.AnimatingWithStoryboards
{




    public class ScopeExample : Page
    {

        private Storyboard myStoryboard;
        private StackPanel myMainPanel;
        private Button button1, button2;

        public ScopeExample()
        {

            this.Background = Brushes.White; 
            myMainPanel = new StackPanel();

            // Create a name scope for the stackpanel. 
            NameScope.SetNameScope(myMainPanel, new NameScope());

            myMainPanel.Background = Brushes.Orange;

            button1 = new Button();
            button1.Name = "Button1";

            // Register button1's name with myMainPanel.
            myMainPanel.RegisterName(button1.Name, button1);
            button1.Content = "Button 1";
            button1.Click += new RoutedEventHandler(button1Clicked);
            myMainPanel.Children.Add(button1);

            button2 = new Button();
            button2.Name = "Button2";

            // Register button2's name with myMainPanel.
            myMainPanel.RegisterName(button2.Name, button2);
            button2.Content = "Button 2";
            button2.Click += new RoutedEventHandler(button2Clicked);
            myMainPanel.Children.Add(button2);


            // Create some animations and a storyboard.
            DoubleAnimation button1WidthAnimation = 
                new DoubleAnimation(300, 200, new Duration(TimeSpan.FromSeconds(5)));
            Storyboard.SetTargetName(button1WidthAnimation, button1.Name);
            Storyboard.SetTargetProperty(button1WidthAnimation, new PropertyPath(Button.WidthProperty));

            DoubleAnimation button2WidthAnimation = 
                new DoubleAnimation(300, 200, new Duration(TimeSpan.FromSeconds(5)));
            Storyboard.SetTargetName(button2WidthAnimation, button2.Name);
            Storyboard.SetTargetProperty(button2WidthAnimation, new PropertyPath(Button.WidthProperty));

            DoubleAnimation heightAnimationWithoutTarget = 
                new DoubleAnimation(300, 200, new Duration(TimeSpan.FromSeconds(5)));
            Storyboard.SetTargetProperty(heightAnimationWithoutTarget, new PropertyPath(FrameworkElement.HeightProperty));                

            myStoryboard = new Storyboard();
            myStoryboard.Children.Add(button1WidthAnimation);
            myStoryboard.Children.Add(button2WidthAnimation);
            myStoryboard.Children.Add(heightAnimationWithoutTarget);

            this.Content = myMainPanel;

        }  


        private void button1Clicked(object sender, RoutedEventArgs args)
        {

            // Starts the animations. The animation without a specified 
            // target name, heightAnimationWithoutTarget, is applied to
            // myMainPanel.
            myStoryboard.Begin(myMainPanel);

        }

        private void button2Clicked(object sender, RoutedEventArgs args)
        {

            // Starts the animations. The animation without a specified 
            // target name, heightAnimationWithoutTarget, is applied to
            // button2.
            myStoryboard.Begin(button2);

        }        

    }


}

Vea también

Tareas

Cómo: Animar una propiedad utilizando un guión gráfico

Conceptos

Información general sobre animaciones