我们有一组存储在ViewModel属性中的DesignerLocation对象。我们希望为每个项目创建上下文菜单,以便用户可以轻松访问它们。
目前,我们将该集合绑定到特定“打开...”上下文菜单的Items属性,这意味着即使只有一个设计器位置,用户也必须弹出该菜单。
e.g。这是我们的上下文菜单的过度简化版本,有三个设计师位置
Open in... (<-- This menu's Items property is bound to DesignerLocations)
Open DesignerLocation1
Open DesignerLocation2
Open DesignerLocation3
[separator]
Cut
Copy
Paste
现在这里只有一个设计师位置的相同上下文菜单。这会为单个项目创建不必要的弹出窗口。
Open in...
Open DesignerLocation1
[separator]
Cut
Copy
Paste
这是我们真正想要的......
Open DesignerLocation1
Open DesignerLocation2
Open DesignerLocation3
[separator]
Cut
Copy
Paste
......如果只有一个......
Open DesignerLocation1
[separator]
Cut
Copy
Paste
那就是说,如何实现类似下面的内容而不必求助于复合集合或手动响应ContextMenuOpening?
<MenuCollectionPlaceholder> <-- This would be bound to DesignerLocations and would generate MenuItems as needed without requiring the flyout
[separator]
Cut
Copy
Paste
最后,我看到人们将ItemsControls直接放在上下文菜单中,但这对我来说似乎不对,因为ItemsControl本身不是MenuItem。这是错的吗?这将为我们提供我们所追求的目标。
<ItemsControl> <-- This would be bound to DesignerLocations and would generate MenuItems as needed without requiring the flyout
[separator]
Cut
Copy
Paste