Вы связываясь с ContextMenu.ItemsSource
, который является другим свойством, чем ContextMenu.Items
ItemsSource
будет установлен только если вы установите его на что-то, например, как совокупность объектов, и если это так, то ваш ItemsControl
будет также быть привязаны к одному и тому же набору объектов. Если список объектов, используемых в вашем ItemsSource
, не имеет свойства, называемого Icon
, ваш код не будет работать.
Если вы пытаетесь привязать к ContextMenu.Items
, вы получите набор MenuItem
объектов, однако объекты пользовательского интерфейса могут иметь только одного родителя в то время, так что ваш MenuItems
может существовать только в любом вашем ContextMenu
или ваши ItemsControl
, а не и то и другое.
Возможна одна из возможных возможностей: привязка с помощью конвертера, который будет принимать объекты внутри вашего ContextMenu
и сделать копию свойства Icon
и вернуть коллекцию изображений для отображения. Следует отметить, что это не сработает до тех пор, пока ваш ContextMenu
не будет открыт впервые, потому что MenuItems
фактически не отображаются до тех пор, пока это не понадобится.
<ItemsControl ItemsSource="{Binding ElementName=MyObjectWithContextMenu,
Converter={StaticResource MyConverter}}" />
где MyConverter
принимает объект, переданный ему, получает объект, ContextMenu
, петель через каждый MenuItem
в ContextMenu.Items
, сохраняет копию Icon
собственности в List<T>
, затем возвращает список.
предоставить XAML для myElement (что такое ContextMenu.ItemsSource) – surfen
ContextMenu - это контекстное меню любого элемента FrameworkElement. У него нет специального кода. Просто коллекция MenuItems. – Rover
Что произойдет, если вы опустите свойство DataType? – surfen