Du Bindung an ContextMenu.ItemsSource
die eine andere Eigenschaft als ContextMenu.Items
ItemsSource
wird nur dann gesetzt werden, wenn man es zu etwas, wie eine Sammlung von Objekten gesetzt, und wenn das der Fall ist, dann ItemsControl
wird auch an die gleiche Sammlung von Objekten gebunden sein. Wenn die Liste der Objekte in Ihrer ItemsSource
nicht gebunden ist, hat eine Eigenschaft namens Icon
, Ihr Code wird nicht funktionieren.
Wenn Sie ContextMenu.Items
zu binden versuchen, werden Sie eine Sammlung von MenuItem
Objekten erhalten, jedoch Objekte UI können nur zu einem Zeitpunkt einen einzelnen Elternteil haben, so dass Ihre MenuItems
nur entweder existieren kann in Ihrem ContextMenu
oder Ihrem ItemsControl
, und nicht beide.
Eine mögliche Option zu tun, was Sie wollen, ist die Bindung mit einem Konverter, der die Objekte innerhalb Ihrer ContextMenu
nimmt, und eine Kopie der Icon
-Eigenschaft, und eine Sammlung der Bilder zur Anzeige zurückgeben. Es sollte beachtet werden, dass dies nicht funktioniert, bis Ihre ContextMenu
das erste Mal geöffnet wird, da die MenuItems
nicht tatsächlich wiedergegeben werden, bis sie benötigt werden.
<ItemsControl ItemsSource="{Binding ElementName=MyObjectWithContextMenu,
Converter={StaticResource MyConverter}}" />
wo MyConverter
die ihm übergebene Objekt nimmt, bekommt das Objekt der ContextMenu
, Schleifen durch jede MenuItem
in ContextMenu.Items
, speichert eine Kopie der Icon
Eigenschaft in einem List<T>
, dann die Liste zurückgibt.
Bereitstellung des XAML für myElement (was ist ContextMenu.ItemsSource) – surfen
ContextMenu ist Kontextmenü von einem FrameworkElement. Es hat keinen speziellen Code. Nur Sammlung von MenuItems. – Rover
Was passiert, wenn Sie die DataType-Eigenschaft weglassen? – surfen