我在wpf中有一个菜单,上面有一个输入框和一个按钮。用户点击按钮后,我需要关闭菜单。
有办法做到这一点吗?
<Menu x:Name="MainMenu">
<MenuItem Header="Main">
<MenuItem Header="SubMenu" x:Name="SubMenu">
<StackPanel Orientation="Horizontal">
<TextBox Width="50" x:Name="TextBox" />
<Button Content="Click Me and Close" x:Name="Button" IsDefault="True"/>
</StackPanel>
</MenuItem>
</MenuItem>
谢谢, 乔恩
答案 0 :(得分:12)
抓住MenuItem
并执行:
_menuItem.IsSubmenuOpen = false;
轻松掌握它:
<Button x:Name="_button" Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MenuItem}, AncestorLevel=2}"/>
代码隐藏:
_button.Click += delegate
{
(_button.Tag as MenuItem).IsSubmenuOpen = false;
};
答案 1 :(得分:4)
我发现使用IsSubmenuOpen
无法正确消除包含MenuItem
的菜单中的焦点(特别是如果菜单位于工具栏中 - 顶级MenuItem
仍为{{ 1}}即使菜单是“已关闭”)。我发现向Selected
发送MouseUp
事件效果更好(在按钮或嵌套控件的Click事件处理程序中):
MenuItem
答案 2 :(得分:2)
private void Button_Click(object sender, RoutedEventArgs e) {
MyMenuItem.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left) {
RoutedEvent = Mouse.MouseUpEvent
});
}