Dynamisch ersteltes StackPanel ansprechen

  • WPF

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    ErfinderDesRades schrieb:

    paq schrieb:

    Ich glaube nich, oder willst du mir sagen ich darf keinen WPF-StackPanel im Codebereich erstellen lassen und versuchen ihn später anzusprechen?
    Ja - genau das! :thumbsup:

    Wie gesagt (jetzt glaub zum 5. Mal): Sowas wäre abstruser Unfug, ähnlich wie mit einem Paddel Suppe zu löffeln.
    Also es ist technisch möglich, und auch nicht im eigentlichen Sinne verboten - nur empfehlenswert ists nicht, und wäre auch ein Bärendienst, dir dabei helfen zu wollen.


    Das Heißt jetzt ich muss jeden Button/StackPanel Fix in Xaml haben?

    Nehmen wir an ich lesen einen Ordner aus mit einer x beliebigen anzahl an Datein. Jede Datei soll einen Button kriegen. Wie soll das über xaml gehen?

    EDIT: Bei dem klick auf den Button soll eine Funktion aufgerufen werden
    man würde im Viewmodel die Datei-Objekte in eine ListCollectionView einlesen.
    Daran würde man ein Xaml-Window binden, vlt. mit einer Listbox.
    Der Listbox (im Xaml) würde man ein ItemTemplate verpassen - und da hinein! käme dein StackPanel mit Button und mw. noch weiterem Kram (alles im Xaml gebastelt).

    Da das Template ein Template ist, würde es automatisch auf jede Datei angewendet, und wups - hast du eine fabelhafte Listbox mit lauter StackPanels drin, für jede Datei eins.

    Wie gesagt - guck bischen im Wpf-Tut-Bereich rum.

    Etwa in Grundlagen - MVVM-Anwendungs-Struktur gibts eine Liste von Personen, die auf verschiedenste Weisen präsentiert werden.
    Ist strukturell ja egal, obs Datei-Objekte sind, oder Person-Objekte.
    Hier ein Minimalbeispiel:

    C#-Code:

    C#-Quellcode

    1. // Kann Syntaxfehler beinhalten.
    2. public ObservableCollection<System.IO.FileInfo> Files { get; set; } = new();

    XAML-Code:

    XML-Quellcode

    1. <ListBox ItemsSource="{Binding Path=Files}">
    2. <ListBox.ItemsPanel>
    3. <ItemsPanelTemplate>
    4. <StackPanel/>
    5. </ItemsPanelTemplate>
    6. </ListBox.ItemsPanel>
    7. <ListBox.ItemTemplate>
    8. <DataTemplate>
    9. <Button Content="{Binding Path=FullName}"/>
    10. </DataTemplate>
    11. </ListBox.ItemTemplate>
    12. </ListBox>


    Für jedes FileInfo-Objekt in der Liste wird von WPF automatisch, ein Button erzeugt. Mit dem ItemsPanelTemplate sagt man der ListBox, dass ein StackPanel verwendet werden soll (was glaub ich auch das Standardverhalten ist). Man könnte auch z.B. ein WrapPanel verwenden.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    paq schrieb:

    Mir scheint so, es hier deutlich übersichtlicher mit HTML/PHP zu programmieren als mit Xaml!

    Der war gut!

    Schau mal in meine Signatur, hier findest du mal den Anfang, natürlich nur wenn man es erlernen WILL.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.