방법: 이름 범위 정의
업데이트: 2007년 11월
코드에서 Storyboard를 사용하여 애니메이션 효과를 주려면 NameScope를 만들고 대상 개체의 이름을 해당 이름 범위를 소유하는 요소에 등록해야 합니다. 다음 예제에서는 myMainPanel에 대한 NameScope를 만듭니다. 그런 다음 button1 및 button2라는 단추 두 개를 패널에 추가하고 이름을 등록한 후 다양한 애니메이션과 Storyboard를 만듭니다. 애니메이션을 시작하는 데에는 Storyboard의 Begin 메서드가 사용됩니다.
button1, button2 및 myMainPanel 모두 동일한 이름 범위를 공유하기 때문에 그 중 하나를 Storyboard Begin 메서드와 함께 사용하여 애니메이션을 시작할 수 있습니다.
예제
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);
}
}
}
참고 항목
작업
방법: Storyboard를 사용하여 속성에 애니메이션 효과 주기