Pharaz Fadaei
Pharaz Fadaei

Reputation: 1827

Contextmenu StaysOpen property is not working at all

I have a very odd problem with contextmenu. Consider this simple code:

<StackPanel>
    <StackPanel.ContextMenu>
        <ContextMenu x:Name="CMenu" StaysOpen="True" >
            <MenuItem Header="Item 1" />
            <MenuItem Header="Item 2">
                <MenuItem Header="Sub item 1" />
                <MenuItem Header="Sub item 2" />
                <MenuItem Header="Sub item 3" />
                <MenuItem Header="Sub item 4" />
            </MenuItem>
            <MenuItem Header="Item 3" />
            <MenuItem Header="Item 4" />
        </ContextMenu>
    </StackPanel.ContextMenu>
    <Label Content="ContextMenu Test" />
    <Button Content="ClickMe" Click="Button_Click" />
</StackPanel>

I set staysopen to true, however, as soon as I click wherever outside of the contextmenu it closes. What is this property used for ? How can I prevent contextmenu from closing ? (Clicking clickme button traces StaysOpen status, it's always true)

Upvotes: 0

Views: 1372

Answers (2)

maulik kansara
maulik kansara

Reputation: 1107

To keep Menu Open even after click, you have to set below property to true for each menuitem

StaysOpenOnClick="True"

so for your requirement, your code would be like below:

<StackPanel>
        <StackPanel.ContextMenu>
            <ContextMenu x:Name="CMenu" StaysOpen="True" >
                                       <MenuItem Header="Item 1" StaysOpenOnClick="True"/>
                    <MenuItem Header="Item 2" StaysOpenOnClick="True">
                        <MenuItem Header="Sub item 1" StaysOpenOnClick="True"/>
                        <MenuItem Header="Sub item 2" StaysOpenOnClick="True"/>
                        <MenuItem Header="Sub item 3" StaysOpenOnClick="True"/>
                        <MenuItem Header="Sub item 4" StaysOpenOnClick="True"/>
                    </MenuItem>
                    <MenuItem Header="Item 3" StaysOpenOnClick="True"/>
                    <MenuItem Header="Item 4" StaysOpenOnClick="True"/>

            </ContextMenu>
        </StackPanel.ContextMenu>
        <Label Content="ContextMenu Test" />
        <Button Content="ClickMe" Click="Button_Click" />
    </StackPanel>

Upvotes: 2

Mr.B
Mr.B

Reputation: 3787

I suppose you need to use Popup instead:

 <StackPanel>
        <Popup IsOpen="True"
               StaysOpen="True"
               PlacementTarget="{Binding RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Panel}}}">
            <ListBox>
                <ListBoxItem Content="1" />
                <ListBoxItem Content="2" />
            </ListBox>
        </Popup>
        <Label Content="ContextMenu Test" />
        <Button Content="ClickMe" />
    </StackPanel>

Nevertheless, you should take care for location of this popup according to movement of your window. Means redefine its X and Y.

Upvotes: 0

Related Questions