2014-01-14 89 views
0

我有一个上下文菜单,当我激活上下文菜单支持并且在上下文菜单支持停用时不显示时,我想显示该菜单。当折叠时WPF上下文菜单片段

为此我已经申请到一个按钮这个上下文菜单:

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

我通过这个功能设置的主上下文菜单项的可见性:

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

如果能见度是折叠保持这个片段: enter image description here

我也试图停用整个上下文菜单,但这是行不通的。 上下文菜单已禁用,我尝试让其弹出上下文菜单不显示。 如果我在尝试获取停用的c-m后激活了上下文菜单,则会显示两个菜单。

也许任何人都知道如何摆脱所示的片段。

+0

你能解释一下_I也试图停用整个上下文菜单,但那不起作用。上下文菜单是否被取消激活,我尝试让它弹出上下文菜单不显示up_?这是如果你禁用它,应该发生的事情。你想在这里做什么?关闭菜单?隐藏其内容?结果应该是什么? – 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