Hallo,
ich will Elemente, die ich zur Laufzeit erstelle animieren. Das erstellen klappt ganz gut aber wenn ich dann StoryBoard.Begin aufrufe kriege ich eine InvalidOperationException mit der Meldung > Fehlermeldung:
Es ist kein verwendbarer Namensbereich zum Auflösen des Namens "menuentry0" vorhanden.
private void CreateMenu()
{
MenuEntry[] menuEntries = new MenuEntry[]
{
new MenuEntry("Menüeintrag1"),
new MenuEntry("Menüeintrag2"),
new MenuEntry("Menüeintrag3")
};
windowHeight = ActualHeight;
menu.Height = menuEntries.Length * 50;
Duration duration = new Duration(new TimeSpan(0, 0, 0, 0, 500));
for (int i = 0, n = menuEntries.Length - 1; i < menuEntries.Length; i++, n--)
{
NameScope.SetNameScope(this, new NameScope());
RegisterName("menuentry" + i.ToString(), menuEntries[i]);
menuEntries[i].Click += delegate (object sender, RoutedEventArgs e)
{
StoryboardMenuClose.Begin();
menu.Visibility = Visibility.Collapsed;
};
TimeSpan begintime = new TimeSpan(0, 0, 0, 0, i * 200);
DoubleAnimation AnimationMenuOpen = new DoubleAnimation
{
From = windowHeight,
Duration = duration,
BeginTime = begintime
};
DoubleAnimation AnimationMenuClose = new DoubleAnimation
{
To = windowHeight,
Duration = duration,
BeginTime = begintime
};
Storyboard.SetTargetName(AnimationMenuOpen, "menuentry" + i.ToString());
Storyboard.SetTargetProperty(AnimationMenuOpen,new PropertyPath(Canvas.TopProperty));
Storyboard.SetTargetName(AnimationMenuClose, "menuentry" + n.ToString());
Storyboard.SetTargetProperty(AnimationMenuClose, new PropertyPath(Canvas.TopProperty));
StoryboardMenuOpen.Children.Add(AnimationMenuOpen);
StoryboardMenuClose.Children.Add(AnimationMenuClose);
Canvas.SetTop(menuEntries[i], i * 50);
menu.Children.Add(menuEntries[i]);
}
}
Bei MenuEntry handelt es sich um Controls.
StoryboardMenuOpen ist global definiert.
Willkommen.
Wenn Du auf Englisch programmieren würdest, dann würdest Du Exception-Messages erhalten, bei denen man auch (mehr) Treffer bei Google hat.
Darüber hinaus ist der Exception Typ (zB InvalidOperationException) wichtig.
Warum jedoch machst Du überhaupt all die Animationen über Code Behind und nicht sauber über XAML?
[Artikel] MVVM und DataBinding
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code