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试一下。


浙公网安备 33010602011771号