FrameworkElement.RegisterName(String, Object) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Zapewnia metodę dostępu, która upraszcza dostęp do NameScope metody rejestracji.
public:
void RegisterName(System::String ^ name, System::Object ^ scopedElement);
public void RegisterName (string name, object scopedElement);
member this.RegisterName : string * obj -> unit
Public Sub RegisterName (name As String, scopedElement As Object)
Parametry
- name
- String
Nazwa do użycia dla określonego mapowania obiektów nazw.
- scopedElement
- Object
Obiekt mapowania.
Przykłady
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
Uwagi
Ta metoda jest wygodną metodą wywoływania RegisterNamemetody . Implementacja sprawdzi kolejne elementy nadrzędne do momentu znalezienia odpowiedniej NameScope implementacji, która zostanie znaleziona przez znalezienie elementu, który implementuje INameScopeelement . Aby uzyskać więcej informacji na temat nazw, zobacz WPF XAML Namescopes.
Wywołanie RegisterName jest niezbędne w celu poprawnego podłączenia scenorysów animacji dla aplikacji utworzonych w kodzie. Wynika to z faktu, TargetNameże jedna z właściwości scenorysu klucza używa odnośnika nazwy czasu wykonywania zamiast odwoływać się do elementu docelowego. Jest to prawdą, nawet jeśli ten element jest dostępny za pomocą odwołania z kodu. Aby uzyskać więcej informacji o tym, dlaczego musisz zarejestrować nazwy elementów docelowych scenorysu, zobacz Storyboards Overview (Omówienie scenorysów).