Search code examples
wpfmenuitemsubmenu

wpf submenu not working when coming from resources


I would like to use wpf menu items, defined in a resource, as menu and submenu. It works when used as a usual menu, but I can't make it work on a submenu.

Here is a sample code:

    <Grid Background="Transparent">

    <Grid.Resources>
        <x:Array Type="{x:Type sys:Object}" x:Key="Extensions">
            <Separator />
            <MenuItem Header="Extension MenuItem 1" />
            <MenuItem Header="Extension MenuItem 2" />
            <MenuItem Header="Extension MenuItem 3" />
        </x:Array>
    </Grid.Resources>

    <Grid.ContextMenu>
        <ContextMenu>
            <ContextMenu.ItemsSource>
                <CompositeCollection>
                    <MenuItem Header="Standard MenuItem 1" />
                    <CollectionContainer Collection="{StaticResource Extensions}" />
                    <MenuItem Header="Extension" >
                        <CollectionContainer Collection="{StaticResource Extensions}" />
                    </MenuItem>
                </CompositeCollection>
            </ContextMenu.ItemsSource>
        </ContextMenu>
    </Grid.ContextMenu>

</Grid>

And the result I get:

Submenu not as expected

Can someone give me the correct wpf syntax ?

Tia


Solution

  • You need to specify the ItemSource and bind the resource correctly :

    <MenuItem Header="Extension" >
       <MenuItem.ItemsSource>
        <CompositeCollection>
         <CollectionContainer Collection="{Binding Source={StaticResource Extensions}}"  />
        </CompositeCollection>
       </MenuItem.ItemsSource>
    </MenuItem>