Доброго времени суток!
Хочу объединить ContextMenu разных контролов. Как можно такое реализовать?
Пытался через CompositeCollection, но когда вызываю ContextMenu у StackPanel, а потом у Button, а потом снова у StackPanel, то у StackPanel пропадает MenuItem.
<Window.DataContext>
<local:MainMenuViewModel></local:MainMenuViewModel>
</Window.DataContext>
<Window.Resources>
<x:Array Type="{x:Type MenuItem}" x:Key="mn">
<MenuItem Header="Main Context" Command="{Binding TestCommand}"></MenuItem>
</x:Array>
</Window.Resources>
<StackPanel Background="Green" Height="100" Width="100" x:Name="myStackPanel">
<StackPanel.ContextMenu>
<ContextMenu ItemsSource="{StaticResource ResourceKey=mn}"></ContextMenu>
</StackPanel.ContextMenu>
<Button Content="Button" Width="120" Height="30">
<Button.ContextMenu>
<ContextMenu>
<ContextMenu.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{StaticResource ResourceKey=mn}"/>
<Separator/>
<MenuItem Header="Child Context" Command="{Binding TestCommand}"/>
</CompositeCollection>
</ContextMenu.ItemsSource>
</ContextMenu>
</Button.ContextMenu>
</Button>
</StackPanel>
MenuItem не может одновременно принадлежать разным ContextMenu. Поэтому для решения данной проблемы нужно создать разные экземпляры MenuItem
<Window.Resources>
<MenuItem x:Key="mainContext" Header="Main Context" x:Shared="False" Command="{Binding TestCommand}"/>
<x:Array x:Key="mainContextMenu" Type="{x:Type MenuItem}" x:Shared="False">
<StaticResource ResourceKey="mainContext"/>
</x:Array>
</Window.Resources>
Полный код:
<Window.DataContext>
<local:MainMenuViewModel></local:MainMenuViewModel>
</Window.DataContext>
<Window.Resources>
<MenuItem x:Key="mainContext" Header="Main Context" x:Shared="False" Command="{Binding TestCommand}"/>
<x:Array x:Key="mainContextMenu" Type="{x:Type MenuItem}" x:Shared="False">
<StaticResource ResourceKey="mainContext"/>
</x:Array>
</Window.Resources>
<Window.ContextMenu>
<ContextMenu ItemsSource="{StaticResource ResourceKey=mainContextMenu}"></ContextMenu>
</Window.ContextMenu>
<Button Content="Button" Width="120" Height="30">
<Button.ContextMenu>
<ContextMenu>
<ContextMenu.ItemsSource>
<CompositeCollection>
<CollectionContainer Collection="{StaticResource ResourceKey=mainContextMenu}"/>
<Separator/>
<MenuItem Header="Button Context" Command="{Binding TestCommand}"/>
</CompositeCollection>
</ContextMenu.ItemsSource>
</ContextMenu>
</Button.ContextMenu>
</Button>
Продвижение своими сайтами как стратегия роста и независимости