2014-01-14 18 views
0

У меня есть контекстное меню, которое я хочу отображать, когда я активирую поддержку контекстного меню и не появляюсь, когда поддержка контекстного меню отключена.WPF ContextMenu фрагмент при обрыве

Therefor У меня есть это контекстное меню применяется к кнопке:

<Button.ContextMenu> 
    <ContextMenu> 
     <MenuItem Name="MyContextMenu" Header="Load To Stack" Visibility="Collapsed"> 
     <MenuItem Name="item0" Header="Stack 1" IsCheckable="False" Click="MenuItem_Click"/> 
     <MenuItem Name="item1" Header="Stack 2" IsCheckable="False" Click="MenuItem_Click"/> 
     <MenuItem Name="item2" Header="Stack 3" IsCheckable="False" Clic="MenuItem_Click"/> 
     <MenuItem Name="item3" Header="Stack 4" IsCheckable="False" Click="MenuItem_Click"/> 
     </MenuItem> 
    </ContextMenu> 
</Button.ContextMenu> 

я установил видимость Main-Context-Пункт меню с помощью этой функции:

public bool ContextMode 
    { 
     get { return StackMode; } 
     set 
     { 
      if (value) 
       MyContextMenu.Visibility = Visibility.Visible; 
      else 
       MyContextMenu.Visibility = Visibility.Collapsed; 
     } 
    } 

Если видимость Collapsed остается этот фрагмент: enter image description here

Я также попытался деактивировать все контекстное меню, но это не работает. Является ли контекстное меню деактивированным, и я пытаюсь его всплывать, контекстное меню не отображается. Если я активирую контекстное меню после попытки дезактивированного c-m, отображаются два меню.

Может быть, кто-нибудь знает, как избавиться от показанного фрагмента.

+0

Можете ли вы объяснить _I также попытался отключить весь контекстное меню, но это не работает. Является ли контекстное меню отключенным, и я пытаюсь его всплывать, контекстное меню не отображается вверх_? Это то, что должно произойти, если вы отключите его. Что вы пытаетесь достичь здесь? Отключить меню? Скрыть свой контент? Каким должен быть результат? – dkozl

+0

ContextMenu должен быть невидим. Деактивировать контекстное меню. Но если вы активируете его, вы получите так много меню, как показано, сколько раз вы пытались отобразить меню, пока оно дезактивировано. Я просто хочу сделать его видимым и невидимым. Вот и все. – marcel

ответ

1

Вы должны обрабатывать ContextMenuOpening событие владеющегоFrameworkElement:

<Button Name="Button" 
     Content="Test" 
     VerticalAlignment="Center" 
     HorizontalAlignment="Center" 
     Padding="10" 
     Click="ButtonBase_OnClick"> 
    <Button.ContextMenu> 
     <ContextMenu> 
      <MenuItem Name="Item0" Header="Load To Stack"> 
       <MenuItem Name="SubItem0" Header="Stack 1" IsCheckable="False"/> 
       <MenuItem Name="SubItem1" Header="Stack 2" IsCheckable="False"/> 
       <MenuItem Name="SubItem2" Header="Stack 3" IsCheckable="False"/> 
       <MenuItem Name="SubItem3" Header="Stack 4" IsCheckable="False"/> 
      </MenuItem> 
     </ContextMenu> 
    </Button.ContextMenu> 
</Button> 

И код-за:

private bool _contextMenuEnabled; 

public MainWindow() 
{ 
    _contextMenuEnabled = true; 
    InitializeComponent(); 
    Button.ContextMenuOpening += Button_ContextMenuOpening; 
} 

void Button_ContextMenuOpening(object sender, ContextMenuEventArgs e) 
{ 
    e.Handled = !_contextMenuEnabled; 
} 

private void ButtonBase_OnClick(object sender, RoutedEventArgs e) 
{ 
    _contextMenuEnabled = !_contextMenuEnabled; 
} 
+0

Это нормально, если он рухнул. Но если я попытаюсь получить контекстное меню во время его свертывания, меню появится дважды, если я активирую меню. – marcel

+0

Вот оно, работает так, как должно. Я никогда не думал, что речь идет об открытии-событии. – marcel

Смежные вопросы