WPF Menu控件 我也有个不能点菜的菜单
WPF Menu控件 我也有个不能点菜的菜单
Windows 应用程序最常见的部分之一是菜单,有时也称为主菜单,因为应用程序中通常只有一个。菜单很实用,因为它提供了很多选项,只占用很少的空间。
向其中添加菜单项非常简单 - 您只需向其中添加 MenuItem 元素,并且每个 MenuItem 可以具有一系列子项目,从而允许您创建分层菜单,正如您在许多 Windows 应用程序中所知道的那样。
做一个菜单吧
<Window x:Class="WpfApp11.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp11" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Menu VerticalAlignment="Top"> <MenuItem Header="文件" > <MenuItem Header="打开" /> <MenuItem Header="保存" /> <MenuItem Header="关闭" /> </MenuItem> </Menu> </Grid> </Window>
与大多数 Windows 应用程序一样,菜单放置在窗口的顶部,但为了与 WPF 的巨大灵活性保持一致,您实际上可以将 Menu 控件放置在您喜欢的任何位置,以及您可能需要的任何宽度或高度。
上面定义了一个顶级项目,有 3个子项目。使用Header属性来定义项目的显示标签。
现在,这个菜单还没有实现功能代码。想要添加代码,可以给menuitem菜单条目添加click属性,
<Grid> <Menu VerticalAlignment="Top"> <MenuItem Header="文件" > <MenuItem Header="打开" Click="openfile"/> <MenuItem Header="保存" /> <MenuItem Header="关闭" /> </MenuItem> </Menu> </Grid>
然后在CS文件中添加实现代码
private void openfile(object sender, RoutedEventArgs e) { // 使用OpenFileDialog控件打开对话框选择文件 // 现在先弹出个提示看看效果 MessageBox.Show("执行打开文件流程"); }
按F5运行以下。
其他菜单也一样,只有添加了事件代码才有反应,不添加事件代码点了没反应。
——————————————————————————
做个例子吧。
实现记事本的打开文件和保存文件功能
先做界面
<Window x:Class="WpfApp11.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:WpfApp11" mc:Ignorable="d" Title="MainWindow" Height="300" Width="300"> <Grid> <!-- Grid、StackPanel、DockPanel这三个控件都属于布局容器控件 Grid:网格。可以自定义行和列并通过行列的数量、行高和列宽来调整控件的布局。近似于Table。 StackPanel:栈式面板。可将包含的元素在竖直或水平方向上排成一条直线,当移除一个元素后, 后面的元素会自动向前移动以填充空缺。 DockPanel:泊靠式面板。内部元素可以选择泊靠方向。就像码头一样,船可以停靠在边缘。 --> <DockPanel> <!--DockPanel.Dock属于依赖属性--> <Menu DockPanel.Dock="Top"> <!-- 一级菜单 --> <MenuItem Header="文件"> <!-- 二级菜单 --> <MenuItem Header="打开" > <!--三级菜单--> <MenuItem Header="打开模板" /> <MenuItem Header="打开文件" Click="openfile" /> <MenuItem Header="最近打开的文件" /> </MenuItem> <MenuItem Header="保存" Click="savefile" /> <!--菜单中的分割线--> <Separator /> <MenuItem Header="关闭" /> </MenuItem> <MenuItem Header="编辑" > <MenuItem Header="复制" /> <MenuItem Header="粘贴" /> </MenuItem> </Menu> <!--添加一个文本框,设置了自动换行和接受回车键允许多行, 让这个程序看起来像个记事本--> <TextBox x:Name="textbox" TextWrapping="Wrap" AcceptsReturn="True" /> </DockPanel> </Grid> </Window>
编辑代码
using Microsoft.Win32; using System.IO; using System.Windows; namespace WpfApp11 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void openfile(object sender, RoutedEventArgs e) { // 打开文件对话框,选择文件 OpenFileDialog openfiledialog = new OpenFileDialog(); //如果打开成功 if (openfiledialog.ShowDialog() == true) { // 获取文件路径 string filepath = openfiledialog.FileName; // MessageBox.Show(filepath); // 读取文件内容,将文本框的text属性值设置为文件内容 textbox.Text = new StreamReader(filepath).ReadToEnd(); } } private void savefile(object sender, RoutedEventArgs e) { // 打开保存文件对话框,选择文件 SaveFileDialog savefiledialog = new SaveFileDialog(); if (savefiledialog.ShowDialog() == true) { string filepath = savefiledialog.FileName; // MessageBox.Show(filepath); // 如果文本文件被打开,直接覆盖会提示错误 // 毕竟这是最简单的功能,没做那么多预测设置 File.WriteAllText(filepath, textbox.Text); } } } }
按F5试一下。