Reputation: 1827
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
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
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