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 ?
-
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? DieTreeView
für WPF liegt unterSystem.Windows.Controls
!
Einfügen, Löschen und Durchlaufen geschieht über die EigenschaftItems
, welche dieTreeView
und dasTreeViewItem
vonItemControls
erben.http://msdn.microsoft.com/en-us/library/system.windows.controls.treeview.aspx
http://msdn.microsoft.com/en-us/library/system.windows.controls.treeviewitem.aspxGrü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 #augenrollerstell 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 wirdwer 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 kannstdann 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 aufklapptdiese defintionen machst du in der xaml
in der cs definierst du nur einmal den baum
feddichdann 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