2012-03-08 189 views
0

我想控制何時顯示或不顯示我的控件的上下文菜單。ContextMenu顯示小於1秒

這裏是我的代碼:

void MyControl_MouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
{ 
    if (some condition .....) 
    { 


      this.Focus(); 
      contextmeun.PlacementTarget = this; 
      contextmeun.IsOpen = true; 


    } 
} 

然而,它只是表明了不到1秒,隨後立即消失。這是爲什麼?

謝謝你的幫助!

+0

我不認爲這就是你如何實現上下文菜單......你應該通過其ContextMenu屬性將上下文菜單附加到控件上。 – BoltClock 2012-03-08 10:42:59

+0

條件...... – user1184598 2012-03-08 10:48:10

回答

1

可能因爲您專注於上下文菜單所屬的控件,然後顯示上下文菜單,但是當父控件獲取焦點時,上下文菜單會關閉。

嘗試設置在XAML上下文菜單,而不是得到正確的行爲

<MyControl> 
    <MyControl.ContextMenu> 
     <ContextMenu> 
      <!-- Define context menu here --> 
     </ContextMenu> 
    </MyControl.ContextMenu> 
</MyControl> 
+0

但是我還有其他一些因素讓它顯示與否。 – user1184598 2012-03-08 10:44:56

+0

還有什麼其他的因素? – BoltClock 2012-03-08 10:45:18

+0

有同樣的想法,你根本不需要使用Focus()。 – Amicable 2012-03-08 10:54:23

0

這可以在純XAML的形式來完成,所有你需要做的是用包含布爾屬性綁定上下文菜單的visibility你的情況是這樣 -

<YourControl> 
    <YourControl.Resources> 
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/> 
    </YourControl.Resources> 
    <YourControl.ContextMenu> 
    <ContextMenu Visibility="{Binding IsEnable, 
       Converter={StaticResource BooleanToVisibilityConverter}}"> 
     <MenuItem Header="MenuItem1"/> 
     <MenuItem Header="MenuItem2"/> 
     <MenuItem Header="MenuItem3"/> 
    </ContextMenu> 
    </YourControl.ContextMenu> 
</YourControl> 

這裏IsEnable是一個普通的CLR屬性,它的getter你可以在你需要切換您的上下文菜單中的曝光率條件取決於邏輯..

+0

非常感謝。但是,該位置將固定在最後一次點擊位置。我是否也可以控制顯示的上下文菜單的位置? – user1184598 2012-03-09 01:39:50

+0

位置將被固定。我沒有得到你。上下文菜單總是打開,你右鍵點擊你的控制。 – 2012-03-09 05:53:56

+0

不。例如,我點擊一個位置,其可見性=隱藏。 後來我在其他位置單擊,並設置其知名度=可見,它會在最後一個位置是以前 – user1184598 2012-03-13 03:22:25