书名:WPF专业编程指南
作者:李应保
出版社:电子工业出版社
出版时间:2010-01
ISBN:9787121100116
一、菜单
菜单是一个常用的控件,常位于应用程序窗口的顶部。
每个菜单里面含有菜单条目(MenuItem),MenuItem是一个带有标题的条目控件,它从HeaderedItemControl类中派生出来。
HeaderedItemControl类中有一个类型为Object的属性:Header,在菜单条目中通常把它设为字符串。有时候菜单条目下会有子菜单,子菜单的条目下还会有下一层的子菜单,等等。
虽然技术上实现多级子菜单没有什么难度,但笔者不太喜欢多级子菜单,原因在于用户使用起来不方便,通常菜单再加一级子菜单就可以了。
特别是引导界面潮流的Microsoft Office软件推出2007版之后,Ribbon控件取代了菜单,多级菜单就不值得提倡了。菜单条目支持类似于CheckBox的选中标记,是布尔类型。
IsCheckable属性表明该条目是否支持选中标记,若设为True,则表明可以设置选择标记。
IsChecked表明该条目选择的状态,它也是布尔类型。
当该值为True时,在该条目上显示一个选中标记。菜单有两种用法,一种是下拉式菜单,另一种是弹出菜单。
二、下拉菜单的例子
<Window x:Class="Yingbao.Chapter6.UseMenu"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Yingbao.Chapter6" Height="300" Width="500">
<DockPanel >
<Menu DockPanel.Dock ="Top" >
<MenuItem Header ="文件" >
<MenuItem Header="打开" InputGestureText ="Ctrl+O">
<MenuItem.Icon >
<Image Source ="Image\open.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="保存" InputGestureText ="Ctrl+S">
<MenuItem.Icon >
<Image Source ="Image\save.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="另存为...">
<MenuItem.Icon >
<Image Source ="Image\save_as.png" />
</MenuItem.Icon>
</MenuItem>
<Separator />
<MenuItem Header ="打印预览"/>
<MenuItem Header ="打印" InputGestureText ="Ctrl+S"/>
<MenuItem Header ="退出"/>
</MenuItem>
<Separator />
<MenuItem Header ="编辑">
<MenuItem Header ="恢复"/>
<MenuItem Header ="重做"/>
<Separator />
<MenuItem Header ="拷贝" InputGestureText ="Ctrl+C" Command
="ApplicationCommands.Copy">
<MenuItem.Icon >
<Image Source ="Image\copy.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header ="裁剪" InputGestureText ="Ctrl+X" Command
="ApplicationCommands.Cut">
<MenuItem.Icon >
<Image Source ="Image\cut.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header ="粘贴" InputGestureText ="Ctrl+P" Command
="ApplicationCommands.Paste">
<MenuItem.Icon >
<Image Source ="Image\paste.png" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="字体">
<MenuItem Header="黑体" IsCheckable="True"
Checked="Bold_Checked"
Unchecked="Bold_Unchecked"/>
<MenuItem Header="斜体" IsCheckable="True"
Checked="Italic_Checked"
Unchecked="Italic_Unchecked"/>
<Separator/>
<MenuItem Header="增大字体"
Click="IncreaseFont_Click"/>
<MenuItem Header="缩小字体"
Click="DecreaseFont_Click"/>
</MenuItem>
</MenuItem>
</Menu>
<TextBox Name ="textBox1" Width ="450" Height ="150"/>
</DockPanel>
</Window>
C#程序
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace Yingbao.Chapter6
{
public partial class UseMenu : System.Windows.Window
{
public UseMenu()
{
InitializeComponent();
}
private void Bold_Checked(object sender, RoutedEventArgs e)
{
textBox1.FontWeight = FontWeights.Bold;}
private void Bold_Unchecked(object sender, RoutedEventArgs e)
{
textBox1.FontWeight = FontWeights.Normal;
}
private void Italic_Checked(object sender, RoutedEventArgs e)
{
textBox1.FontStyle = FontStyles.Italic;
}
private void Italic_Unchecked(object sender, RoutedEventArgs e)
{
textBox1.FontStyle = FontStyles.Normal;
}
private void IncreaseFont_Click(object sender, RoutedEventArgs e)
{
if (textBox1.FontSize < 60)
{
textBox1.FontSize += 4;
}
}
private void DecreaseFont_Click(object sender, RoutedEventArgs e)
{
if (textBox1.FontSize > 10)
{
textBox1.FontSize -= 4;
}
}
}
}
运行WPF中下拉菜单的例子,如图6-15所示。

图6-15 WPF中的下拉菜单