Nasıl yapılır: Ad Kapsamı Tanımlama
Kod içinde ile Storyboard animasyon eklemek için, bir NameScope oluşturmanız ve hedef nesnelerin adlarını bu ad kapsamına sahip olan öğeye kaydetmeniz gerekir. Aşağıdaki örnekte için myMainPanel
bir NameScope oluşturulur. panele iki düğme button1
ve button2
, eklenir ve adları kaydedilir. Birkaç animasyon ve bir Storyboard oluşturulur. Görsel taslak Begin yöntemi, animasyonları başlatmak için kullanılır.
button1
, button2
ve myMainPanel
tümü aynı ad kapsamını paylaştığından, bunlardan herhangi biri animasyonları başlatmak için yöntemiyle Storyboard Begin kullanılabilir.
Örnek
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);
}
}
}
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
Ayrıca bkz.
GitHub'da bizimle işbirliği yapın
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.
.NET Desktop feedback