Bindung an ein TreeView mit ContextMenu in Xaml
Ich bin ziemlich neu bei Xaml und brauche einige beraten.
Einem TreeView gebunden werden soll einer hierarchischen Objekt-Struktur. Das TreeView sollte ein Kontext-Menü, das spezifisch für jeden Objekttyp.
Ich habe versucht, die folgenden:
<TreeView>
<TreeView.Resources>
<DataTemplate x:Key="RoomTemplate">
<TreeViewItem Header="{Binding Name}">
<TreeViewItem.ContextMenu>
<ContextMenu>
<MenuItem Header="Open" />
<MenuItem Header="Remove" />
</ContextMenu>
</TreeViewItem.ContextMenu>
</TreeViewItem>
</DataTemplate>
</TreeView.Resources>
<TreeViewItem Header="{Binding Name}" Name="tviRoot" IsExpanded="True" >
<TreeViewItem Header="Rooms"
ItemsSource="{Binding Rooms}"
ItemTemplate="{StaticResource RoomTemplate}">
<TreeViewItem.ContextMenu>
<ContextMenu>
<MenuItem Header="Add room"></MenuItem>
</ContextMenu>
</TreeViewItem.ContextMenu>
</TreeViewItem>
</TreeViewItem>
Aber mit diesem markup, das Verhalten ist so beabsichtigt, aber die untergeordneten Elemente (die Zimmer) sind eingerückt zu viel.
Sowieso alle bining Proben die ich finden konnte, verwenden TextBlock anstelle von TreeViewItem im DataTemplate, aber die Frage, wie integrieren Sie die ContextMenu gibt.
InformationsquelleAutor Michael Stoll | 2010-03-22
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würden Sie normalerweise nicht schaffen ein DataTemplate mit einem TreeViewItem, da die Bindung der Infrastruktur Erstellung der TreeViewItem für Sie-alle Ihre DataTemplate muss nur angeben, was angezeigt werden soll, wie die Inhalt der TreeViewItem. Das ist, warum die Beispiele, die Sie gefunden haben, verwenden Textblöcke statt TreeViewItems in der DataTemplate.
Ich vermute, dass die Verwendung von TreeViewItem eher als TextBlock, der bewirkt, dass die übermäßige Einrücken, weil Sie einen (manuell erstellten) TreeViewItem in Ihrem DataTemplate (gegen eine Stufe der Einrückung) innerhalb einer anderen (automatische) TreeViewItem (gegen andere Ebene der Gedankenstrich). Wenn Sie also einen TextBlock anstelle eines TreeViewItem sollte dieses Kurieren. Die Integration der ContextMenu-sollte kein Problem sein, weil TextBlock hat eine ContextMenu-Eigenschaft zu.
Sind, So sollten Sie in der Lage, ändern Sie einfach Ihre DataTemplate wie folgt:
Übrigens für TreeViews ist es üblich mit einem HierarchicalDataTemplate eher als ein schlichtes DataTemplate, da dies ermöglicht mehrere Ebenen der Elemente, die über das HierarchicalDataTemplate.ItemsSource-Eigenschaft. Dies kann nicht erforderlich sein, die in Ihrem Szenario obwohl.
<HDT><TreeViewItem Header="Rooms" ItemsSource="{Binding}" /></HDT>
. Nicht getestet, aber! Wenn dies nicht funktioniert, möchten Sie vielleicht, um es zu veröffentlichen, als eine neue Frage, wie dies wird wahrscheinlich erhalten Sie mehr Aufmerksamkeit und somit bessere Antworten als die weitere Diskussion in der Kommentar-Kette -- nur ein Vorschlag!