我在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>
Run Code Online (Sandbox Code Playgroud)
谢谢,乔恩
Ken*_*art 12
掌握MenuItem
并做到:
_menuItem.IsSubmenuOpen = false;
Run Code Online (Sandbox Code Playgroud)
轻松掌握它:
<Button x:Name="_button" Tag="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MenuItem}, AncestorLevel=2}"/>
Run Code Online (Sandbox Code Playgroud)
代码隐藏:
_button.Click += delegate
{
(_button.Tag as MenuItem).IsSubmenuOpen = false;
};
Run Code Online (Sandbox Code Playgroud)
小智 5
我发现使用IsSubmenuOpen
并不能正确消除包含菜单的焦点(特别是如果菜单位于工具栏中 -即使菜单“关闭”,MenuItem
顶层MenuItem
仍然保留)。Selected
我发现发送MouseUp
事件到MenuItem
效果更好(在按钮或嵌套控件的 Click 事件处理程序中):
private void button_Click(object sender, RoutedEventArgs e) {
Button b = sender as Button;
if (b == null || !(b.Parent is MenuItem))
return;
MenuItem mi = b.Parent as MenuItem;
mi.RaiseEvent(
new MouseButtonEventArgs(
Mouse.PrimaryDevice, 0, MouseButton.Left
)
{RoutedEvent=Mouse.MouseUpEvent}
);
}
Run Code Online (Sandbox Code Playgroud)