我想在单独的面板中显示myElement.ContextMenu图标。 我正在尝试这样做:
<ItemsControl ItemsSource="{Binding ElementName=myElement, Path=ContextMenu.ItemsSource}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type MenuItem}">
<Image Source="{Binding Icon}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
但它显示了我收集的MenuItems而不是Images。如果没有xxx.xaml.cs文件中的任何ViewModel和操作,我怎么能这样做。
答案 0 :(得分:1)
您绑定到的ContextMenu.ItemsSource
属性与ContextMenu.Items
ItemsSource
只有在您将其设置为某些内容时才会设置,例如对象集合,如果是这种情况,那么您的ItemsControl
也将绑定到同一个对象集合。除非ItemsSource
中使用的对象列表绑定了具有名为Icon
的属性,否则您的代码将无效。
如果您尝试绑定到ContextMenu.Items
,您将获得MenuItem
个对象的集合,但是UI对象一次只能有一个父对象,因此您的MenuItems
只能存在于ContextMenu
或ItemsControl
,而不是两者。
执行所需操作的一个可能选项是使用Converter绑定,它将获取ContextMenu
中的对象,并复制Icon
属性,并返回图像集合显示。应该注意的是,在第一次打开ContextMenu
之前,这不起作用,因为MenuItems
在需要之前才会实际呈现。
<ItemsControl ItemsSource="{Binding ElementName=MyObjectWithContextMenu,
Converter={StaticResource MyConverter}}" />
其中MyConverter
获取传递给它的对象,获取对象的ContextMenu
,遍历MenuItem
中的每个ContextMenu.Items
,存储Icon
的副本List<T>
中的属性,然后返回列表。