南宁横县网站建设推广,市场监督管理局官网入口,代做百度首页排名价格,wordpress 标题 外链目录 ContextMenu介绍WPF实现点击鼠标左键弹出菜单如何禁用右键菜单如何修改菜单样式菜单位置设置 本篇博客介绍WPF点击按钮弹出菜单#xff0c;效果如下#xff1a; 菜单的位置、央视可以自定义。 实现技巧#xff1a;不在xaml里菜单#xff0c;在按钮左键按下的点击事件里… 目录 ContextMenu介绍WPF实现点击鼠标左键弹出菜单如何禁用右键菜单如何修改菜单样式菜单位置设置 本篇博客介绍WPF点击按钮弹出菜单效果如下 菜单的位置、央视可以自定义。 实现技巧不在xaml里菜单在按钮左键按下的点击事件里写弹出菜单需要用到ContextMenu。
ContextMenu介绍
ContextMenu 是 WPF 中的一个控件它允许你在用户执行特定动作通常是右键单击时显示一个弹出式菜单。这个菜单可以包含多个菜单项每个菜单项都可以执行一个特定的命令或者打开一个子菜单。
以下是一个简单的 ContextMenu 的例子
Button ContentRight Click MeButton.ContextMenuContextMenuMenuItem HeaderFirst Item ClickFirstItem_Click/MenuItem HeaderSecond Item ClickSecondItem_Click/MenuItem HeaderThird Item ClickThirdItem_Click//ContextMenu/Button.ContextMenu
/Button在这个例子中我们创建了一个包含三个菜单项的上下文菜单。当这些菜单项被单击时它们会触发相应的 Click 事件处理器。
ContextMenu 控件还提供了一些属性和事件让你可以更加精细地控制菜单的行为和外观。例如
IsOpen 属性这个属性表示菜单是否当前是打开的。你可以设置这个属性来手动打开或者关闭菜单。Placement 属性这个属性允许你控制菜单的位置。你可以使菜单出现在目标元素的左边、右边、上方、下方或者在鼠标指针的当前位置。Closed 事件这个事件在菜单被关闭时触发无论是由于用户选择了一个菜单项还是由于其他原因例如用户点击了菜单以外的地方。
注意虽然 ContextMenu 通常与用户的右键单击动作关联但你也可以在其他情况下显示 ContextMenu。例如你可以在用户点击一个按钮或者选择一个菜单项时显示 ContextMenu。这可以通过设置 IsOpen 属性或者调用 ContextMenu 的 IsOpen 方法来实现。
最后你还可以通过定义样式和模板来自定义 ContextMenu 和 MenuItem 的外观。这使得你可以创建符合你应用程序视觉主题的菜单。
WPF实现点击鼠标左键弹出菜单
代码如下
private void Btn2_Click(object sender, RoutedEventArgs e)
{// 引用按钮ContextMenu contextMenu new ContextMenu();contextMenu.Style (Style)FindResource(ContextMenuStyle);MenuItem menuItem1 new MenuItem { Header Option 1 };menuItem1.Click MenuItem_Click;menuItem1.Style (Style)FindResource(MenuItemStyle);contextMenu.Items.Add(menuItem1);MenuItem menuItem2 new MenuItem { Header Option 2 };menuItem2.Click MenuItem_Click;menuItem2.Style (Style)FindResource(MenuItemStyle);contextMenu.Items.Add(menuItem2);MenuItem menuItem3 new MenuItem { Header Option 3 };menuItem3.Click MenuItem_Click;menuItem3.Style (Style)FindResource(MenuItemStyle);contextMenu.Items.Add(menuItem3);contextMenu.Closed ContextMenu_Closed;btn2.ContextMenu contextMenu;contextMenu.PlacementTarget btn2;// 显示在按钮下方// contextMenu.Placement System.Windows.Controls.Primitives.PlacementMode.Bottom;// 任意调整位置contextMenu.Placement System.Windows.Controls.Primitives.PlacementMode.RelativePoint;contextMenu.HorizontalOffset 10;contextMenu.VerticalOffset btn2.Height;btn2.ContextMenu.IsOpen true;
}如何禁用右键菜单
同时需要禁用掉右键菜单因为ContextMenu是右键菜单在按钮上右击鼠标时也会弹出菜单不符合设计预期链接ContextMenu的Closed事件当ContextMenu关闭时把ContextMenu设为空代码如下
// 在关闭上下文菜单时将其从按钮中移除
private void ContextMenu_Closed(object sender, RoutedEventArgs e)
{btn2.ContextMenu null;
}菜单项事件
private void MenuItem_Click(object sender, RoutedEventArgs e)
{MenuItem menuItem (MenuItem)sender;MessageBox.Show(You clicked menuItem.Header);
}如何修改菜单样式
菜单样式修改和常规的xaml写法不同因为此时的菜单是在C#代码里写的但是可以通过资源的形式设置xaml代码如下
Window x:ClassWpfControl_Button.MainWindowxmlnshttp://schemas.microsoft.com/winfx/2006/xaml/presentationxmlns:xhttp://schemas.microsoft.com/winfx/2006/xamlxmlns:dhttp://schemas.microsoft.com/expression/blend/2008xmlns:mchttp://schemas.openxmlformats.org/markup-compatibility/2006xmlns:localclr-namespace:WpfControl_Buttonmc:IgnorabledTitleMainWindow Height450 Width800!--按你菜单样式在cs代码里可以调用然后设置菜单的样式--Window.ResourcesStyle TargetTypeContextMenu x:KeyContextMenuStyleSetter PropertyBackground ValueLightGray/Setter PropertyForeground ValueBlack//StyleStyle TargetTypeMenuItem x:KeyMenuItemStyleSetter PropertyBackground ValueLightBlue/Setter PropertyForeground ValueBlack//Style/Window.ResourcesGridCanvasButton x:Namebtn ContentButton Canvas.Left20 Canvas.Top100 Width100 Height50 Clickbtn_Click/Button x:Namebtn2 ContentButton2 Canvas.Left200 Canvas.Top100 Width100 Height50 ClickBtn2_Click//Canvas/Grid
/Window在C#代码里查找设置ContextMenuStyle和MenuItemStyle即可实现菜单的样式修改。
菜单位置设置
使用Placement属性可以控制ContextMenu的弹出位置。PlacementMode枚举提供了多种可选的位置模式
Absolute弹出菜单的左上角在屏幕的特定位置。 AbsolutePoint弹出菜单在屏幕上的特定位置。 Bottom弹出菜单在其目标的下方。 Center弹出菜单位于其目标的中央。 Left弹出菜单位于其目标的左边。 Mouse弹出菜单在鼠标位置。 MousePoint弹出菜单在鼠标位置同Mouse。 Relative弹出菜单相对于其目标的特定位置。 RelativePoint弹出菜单相对于其目标的特定位置。 Right弹出菜单位于其目标的右边。 Top弹出菜单在其目标的上方。 如果你想要在任意位置显示ContextMenu你可以使用Absolute或AbsolutePoint模式并设置HorizontalOffset和VerticalOffset属性来指定菜单的具体位置。
需要注意的是一定要设置菜单的目标控件然后再设置位置代码如下
contextMenu.PlacementTarget btn2;// 显示在按钮下方
// contextMenu.Placement System.Windows.Controls.Primitives.PlacementMode.Bottom;// 任意调整位置
contextMenu.Placement System.Windows.Controls.Primitives.PlacementMode.RelativePoint;
contextMenu.HorizontalOffset 10;
contextMenu.VerticalOffset btn2.Height;上面代码使用的是相对位置RelativePoint然后做便宜来调整弹出菜单的位置。