2016-08-24 65 views
0

我有一個與contextmenu非常奇怪的問題。考慮這個簡單的代碼:Contextmenu StaysOpen屬性根本不工作

<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> 

我設置staysopen爲真,但是,當我點擊任何地方的文本菜單以外它關閉。這個屬性用於什麼?我怎樣才能防止關閉contextmenu? (點擊clickme按鈕痕跡StaysOpen狀態,它總是如此)

+0

嗯:http://stackoverflow.com/a/20370672/424129 –

+0

@EdPlunkett我的情況是不同的。當我點擊菜單項時,我不希望contextmenu保持打開狀態。關閉是可以的。當我點擊其內容時,我不想讓菜單關閉。 – Pharaz

+0

它的含義相同:您需要避免關閉並保持打開狀態。 當你需要手動打開和關閉時使用彈出和控制。 –

回答

0

我想你需要使用彈出窗口來代替:

<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> 

不過,你應該根據自己的窗口的移動照顧這個彈出窗口的位置。意味着重新定位自己的X和Y

+0

我已經考慮過使用彈出窗口,但我希望它看起來像一個真正的contextmenu,因爲我使用contextmenu的自定義樣式,我不想亂。 – Pharaz

+0

這裏沒有選擇。您必須從Popup實現您自己的「上下文菜單」,因爲原始上下文菜單已被構建爲關閉。 –

+0

那麼上下文菜單中的StaysOpen屬性的目的是什麼?我錯過了什麼嗎? – Pharaz

0

爲了使菜單打開,即使點擊後,您將擁有以下屬性設置爲true每個菜單項

StaysOpenOnClick="True" 

所以對於你的要求,你的代碼會象下面這樣:

<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> 
+0

在菜單項上將StaysOpenOnClick設置爲true可以防止在單擊該菜單項時關閉上下文菜單,並且當您在上下文菜單之外單擊時仍然關閉。 – Pharaz