WPF TreeView ...



  • ups - verlesen #gg



  • Ich weiss nun doch nicht weiter. Die ItemTemplate Eigenschaft von
    TreeViewItem ist vom Typ DataTemplate. Wie bringe ich mein Bildchen
    in das DataTemplate-Objekt ? Könnt ihr vielleicht Code hinschreiben ?



  • Ausserdem weiss ich nicht, wie man Linien, vor den Einträgen anordnet.
    Weiss jemand ein gutes Buch, das einigermasen vollständig ist, und solche
    Kleinigkeiten enthält ?



  • Und nochmal, Sorry !
    Folgendes habe ich gefunden:

    TreeViewItem item = new TreeViewItem();
    StackPanel heather = new StackPanel();
    heather.Orientation = Orientation.Horizontal;
    heather.Children.Add(new Image { Source = new BitmapImage(new uri("hallo.bmp")) } );
    heather.Children.Add(new TextBox { Text = "hallo" } );
    item.Haeder = heather;

    Nur weiss ich nicht, wie man ausgewählte ( angeklickte ) Einträge
    mit einem besonderem Bildchen versieht.



  • also ich wuerd das sowieso eher mit einem binding loesen als die items immer direkt rein zu pflanzen
    dann kann man in einem trigger des datatemplates das binding auf dem bild umbiegen sobald das element selektiert ist {o;

    // pseudo - ist komplett ausgedacht, muss nicht funktionieren

    <TreeView x:Name="Tree" ItemsSource="{Binding}">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate ItemsSource="{Binding Path=Childs}">
                <StackPanel>
                    <Image Source="{Binding Icon}" x:Name="FileIcon" />
                    <TextBlock Text="{Binding Name}" VerticalAllignment="Center" />
                </StackPanel>
                <HierarchicalDataTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="Source" Value="{Binding SelectedIcon}" TargetName="FileIcon" />
                    </Trigger>
                </HierarchicalDataTemplate.Triggers>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>
    


  • Ich möchte meine TreeView Geschichten ( WPF ) nur mit dem Code allein
    lösen. Vergeblich suchte ich Methoden zum Durchlaufen, Löschen Einfügen der
    Tree Einträge. Werden System.Window.Forms noch Fehlerbereinigt, wenn schon
    nicht weiterentwickelt ?


  • Administrator

    GeorgC++ schrieb:

    Ich möchte meine TreeView Geschichten ( WPF ) nur mit dem Code allein
    lösen. Vergeblich suchte ich Methoden zum Durchlaufen, Löschen Einfügen der
    Tree Einträge. Werden System.Window.Forms noch Fehlerbereinigt, wenn schon
    nicht weiterentwickelt ?

    Was hat System.Windows.Forms mit WPF zu tun? Die TreeView für WPF liegt unter System.Windows.Controls !
    Einfügen, Löschen und Durchlaufen geschieht über die Eigenschaft Items , welche die TreeView und das TreeViewItem von ItemControls erben.

    http://msdn.microsoft.com/en-us/library/system.windows.controls.treeview.aspx
    http://msdn.microsoft.com/en-us/library/system.windows.controls.treeviewitem.aspx

    Grüssli



  • 1. einfuegen - loeschen - durchlaufen usw geht doch alles
    2. alles per code ist doch schon recht altbacken - da kann man dann wirklich bei forms bleiben wenn man das bessere nicht machen will #augenroll

    erstell dir ein datenbaum - mit den kannst du machen was du willst
    brauchst dann nur noch das datacontext des tree auf dein baum machen - fertig ist
    dann kannst du im baum durchlaufen, editieren, loeschen, hinzufuegen wasauchimmer
    die tree kuemmert sich dann selbststaendig das es immer richtig angezeigt wird

    wer kuemmert sich heut zu tage in wpf noch staendig darum das alles richtig angezeigt wird ? das macht man nur einmal bei der definition und ab dann ueberlaesst man es dem framework

    also echt - alles zu fuss gehen und dann rumjammern das alles so doof sei - tze



  • Das ist aber kein Problem welches nur der Threadersteller hat. Ich bekomms oft mit dass Umsteiger von Windows Forms auf WPF solche Probleme haben. Viele denken WPF ist einfach nur schöneres Windows Forms und verzweifeln dann weil vieles ganz anders funktioniert. Das WPF was Controls, anzuzeigene Daten etc. viel flexibler ist und ganz andere Konzepte benutzt als Windows Forms sehen einige nur als Hinderniss statt als Gelegenheit was besser zu machen.



  • Den Datenbaum mit XAML erstellen ist eine Sache, aber die Strukturansicht
    zur Laufzeit modifizieren die andere. Mir deucht das XAML nur für die
    statischen Sachen gut ist. Einen Eintrag zur Laufzeit hinzufügen, bzw
    löschen, muss mit C# Code bewerkstelligt werden.



  • Wenn ich wie beim Windows-Explorer vorhanden, meine TreeView mit dem
    Verzeichnisbaum von Windows füllen möchte nützt mir XAML recht wenig.



  • Nochmals, Sorry ...
    Kann schon sein, dass ich noch nicht die richtige Sichtweise habe.
    Ich weiss bis jetzt noch nicht, wie man Bildchen, die auch noch
    variieren können, vor die TreeView-Einträge setzt ( zur Laufzeit weil
    Einträge auch noch später hinzugefügt werden können ).



  • GeorgC++ schrieb:

    Den Datenbaum mit XAML erstellen ist eine Sache, aber die Strukturansicht
    zur Laufzeit modifizieren die andere. Mir deucht das XAML nur für die
    statischen Sachen gut ist. Einen Eintrag zur Laufzeit hinzufügen, bzw
    löschen, muss mit C# Code bewerkstelligt werden.

    schon - nur man gibt es dann der eigenen liste und man erstellt nicht erst per hand die ganzen sachen fuer die anzeige - das macht die xaml

    GeorgC++ schrieb:

    Wenn ich wie beim Windows-Explorer vorhanden, meine TreeView mit dem
    Verzeichnisbaum von Windows füllen möchte nützt mir XAML recht wenig.

    falsch - du koenntest den tree auch direkt in xaml fuellen lassen - brauchtest lediglich ein converter

    zb
    http://social.expression.microsoft.com/Forums/en-US/wpf/thread/d139dba9-dd18-4864-9f9d-d24045d7e785/

    GeorgC++ schrieb:

    Nochmals, Sorry ...
    Kann schon sein, dass ich noch nicht die richtige Sichtweise habe.
    Ich weiss bis jetzt noch nicht, wie man Bildchen, die auch noch
    variieren können, vor die TreeView-Einträge setzt ( zur Laufzeit weil
    Einträge auch noch später hinzugefügt werden können ).

    das einfachste ist da ein binding
    aaalso
    mal zur theorie
    du erstellst ein objekt, das hat alle properties - also "name", "picture" und zudem noch eine observablecollection mit sich selber als "children" oder "items"
    dieses objekt erstellst du beliebig oft in eine weitere observablecollection
    sodass du ein baum mit diesen objekt hast bzw erstellen und verwalten lassen kannst

    dann sagst du lediglich "tree: zeige diesen baum"
    und das wars
    du musst nur im tree definieren welches property er wo an zu zeigen hat
    dann kannst du auch ein trigger setzen - das - sobald etwas passiert ein anderes property verwendet werden soll
    zb das das icon sich aendert wenn man es anklickt oder aufklappt

    diese defintionen machst du in der xaml
    in der cs definierst du nur einmal den baum
    feddich

    dann kannst du mit dem cs baum tun und lassen was du moechtest, die tree bleibt immer aktuell
    und du brauchst nie ein treeviewitem erstellen und in den tree ein fummeln - das soll das framework fuer dich machen


Anmelden zum Antworten