mayho33
Goto Top

C-Sharp WPF Grid Visibility

Hallo @ All

Ich knabbere an einem Problem mit dem Visibility- Property und komme einfach nicht weiter. Hoffe auf eure Unterstützung. Mein Problem ist folgendes:

Ich habe mehrere Grids in einem Window die ich mit Buttons (Next & Previous) Hidden oder Visible setze. Das funktioniert solange ich das Grid "direkt" anspreche:

MyGrid1.Visibility = Visibility.Hidden
MyGrid2.Visibility = Visibility.Visible

Ich wollte es mir aber einfacher machen und das ganze etwas dynamischer gestalten indem ich alle Grids die MainWindow besitzt auf diesem Weg in einer List<Grid> speichere.
Leider wird das Visibility-Property nun komplett ignoriert:

//extension
public static List<T> GetChildsLike<T>(this object parent) where T : DependencyObject
{
    List<T> logicalCollection = new List<T>();
    GetChildsLike(parent as DependencyObject, logicalCollection);
    return logicalCollection;
}

private static void GetChildsLike<T>(DependencyObject parent, List<T> logicalCollection) where T : DependencyObject
{
    IEnumerable children = LogicalTreeHelper.GetChildren(parent);
    foreach (object child in children)
    {
        if (child is DependencyObject)
       {
            DependencyObject depChild = child as DependencyObject;
            if (child is T)
                logicalCollection.Add(child as T);

            GetChildsLike(depChild, logicalCollection);
       }
   }
}

private void button_NEXT_Click(object sender, RoutedEventArgs e)
{
List<Grid> MyGrids             = new MainWindow().GetChildsLike<Grid>()
                        .Where(x => x.Name.ToLower().Contains("my"))  
                        .OrderBy(x => x.Name.Substring(x.Name.Length -1, 1)).ToList(); 

MyGrids.Visibility = Visibility.Hidden
MyGrids[1].Visibility = Visibility.Visible
}

Hat jemand von euch einen Tipp wo der Fehler liegt? Bin Dankbar für jede Hilfe!

Danke!

Mayho

Content-Key: 317131

Url: https://administrator.de/contentid/317131

Ausgedruckt am: 28.03.2024 um 21:03 Uhr

Mitglied: atze187
Lösung atze187 07.10.2016 um 11:06:28 Uhr
Goto Top
Du erzeugst ein neues Fenster

List<Grid> MyGrids             = new MainWindow().GetChildsLike<Grid>() 

Daher wird das nicht in deinem Fenster geändert. Mach das hier, wenn der Click-Handler in der Klasse zu deinem Fenster liegt.

List<Grid> MyGrids             = this.GetChildsLike<Grid>() 
Mitglied: mayho33
mayho33 07.10.2016 um 11:27:32 Uhr
Goto Top
Ha! Das wars! Wie blöd. Da hätte ich ja wohl selbst drauf kommen können.

Danke atze!
Mitglied: atze187
atze187 07.10.2016 um 11:35:52 Uhr
Goto Top
Macht nix, passiert mir auch. Ich kann Gummienten empfehlen: Rubber duck debugging
Mitglied: mayho33
mayho33 07.10.2016 um 11:50:20 Uhr
Goto Top
Guter Tipp, Danke!