wpf创建菜单

10.修改_Help菜单项的定义,像以下加粗的代码显示的那样添加子菜单项:

<MenuItem Header="_Help" >
<MenuItem Header="_About Middleshire 
Bell Ringers" Name="about" />
</MenuItem>

11.选择”调试”|”开始执行(不调试)”,从而生成并运行应用程序。

等窗体出现后,单击File菜单。应该看到下图所示的子菜单项。

单击Help菜单,可以看到其中的About Middleshire Bell Ringers菜单项。

12.关闭窗体,返回Visual Studio 2008编程环境。

为了美化界面,还可以为菜单项添加图标。包括Visual Studio 2008在内的许多应用程序都利用菜单中的图标来提供额外的视觉线索。

13.在解决方案资源管理器中,右击BellRingers项目,然后从快捷菜单中选择”添加”|”现有项”。在”添加现有项-BellRingers”对话框中,切换到”文档”文件夹下的Microsoft Press\Visual CSharp Step By Step\Chapter 23子文件夹。在”文件类型”列表中,选择”所有文件(*.*)”,然后按住Ctrl键不放,依次单击Ring.bmp,ace.bmp和Note.bmp这三个图像文件。最后单击”添加”。

这样一来,三个图像文件便作为资源添加到应用程序中。【455】

14.在XAML窗格中,修改newMember,aveMember和about菜单项的定义,为它们都添加一个MenuItem.Icon子元素,并分别引用上一步添加的三个图标文件。如以下加粗的代码所示:

<Menu Height="22" Name="menu1" ... >
<MenuItem Header="_File" >
<MenuItem Header="_New Member" Name="newMember" >
<MenuItem.Icon>
<Image Source="face.bmp"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="_Save Member Details" Name="saveMember" >
<MenuItem.Icon>
<Image Source="note.bmp"/>
</MenuItem.Icon>
</MenuItem>
<Separator/>
<MenuItem Header="E_xit" Name="exit"/>
</MenuItem>
<MenuItem Header="_Help">
<MenuItem Header="_About Middleshire Bell Ringers" Name="about" >
<MenuItem.Icon>
<Image Source="ring.bmp"/>
</MenuItem.Icon>
</MenuItem>
</MenuItem>
</Menu>

15.最后,我们应该使菜单项的文本样式和窗体上的其他文本的样式保持一致。在XAML窗格中,编辑顶级menu1元素的定义,将Style属性设为BellRingersFontStyle样式,如以下加粗的代码所示:

<Menu Style="{StaticResource bellRingersFontStyle}" ... Name="menu1" ... >

注意,子菜单会自动继承顶级菜单的样式。

16.选择”调试”|”开始执行(不调试)”,再次生成并运行应用程序。

等窗体出现后,请单击File菜单。现在,菜单项的文本应采用正确的字体显示,而且菜单项前面显示了图标,如下图所示。

17.关闭窗体,返回Visual Studio 2008编程环境。【456】

菜单项的类型

前面一直在用MenuItem元素向Menu控件添加菜单项。MenuItem元素可以嵌套其他MenuItem元素。在前面的例子中,我们将顶级菜单作为MenuItem添加,再用嵌套的MenuItem来定义完整的菜单结构。一个嵌套的MenuItem元素还可以包含更深一级的嵌套MenuItem,这样就可以创建”级联”或者”层叠”菜单。虽然理论上没有嵌套深度的限制,但在实际的应用程序中,一般最多只会进行2级嵌套。

但是,并非只能使用MenuItem元素。还可以在WPF菜单中添加组合框、文本框以及其他许多类型的控件。例如,以下菜单结构包含了一个按钮和一个组合框。

<Menu ...>
<MenuItem Header="Miscellaneous">
<Button>Add new member</Button>
<ComboBox Text="Towers">
<ComboBox.Items>
<ComboBoxItem>
Great Shevington
</ComboBoxItem>
<ComboBoxItem>
Little Mudford
</ComboBoxItem>
<ComboBoxItem>
Upper Gumtree
</ComboBoxItem>
<ComboBoxItem>
Downley Hatch
</ComboBoxItem>
</ComboBox.Items>
</ComboBox>
</MenuItem>
</Menu>

运行后,上述菜单结构显示如下:

虽然菜单的设计十分灵活,但应该尽量简化设计,不要把界面搞得过于复杂。像上面那样的一个菜单用起来十分别扭!

发表评论