Laden...

Es ist kein verwendbarer Namensbereich zum Auflösen des Namens "menuentry0" vorhanden

Erstellt von Jungbluth vor 4 Jahren Letzter Beitrag vor 4 Jahren 655 Views
J
Jungbluth Themenstarter:in
1 Beiträge seit 2019
vor 4 Jahren
Es ist kein verwendbarer Namensbereich zum Auflösen des Namens "menuentry0" vorhanden

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.

16.807 Beiträge seit 2008
vor 4 Jahren

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