4、Ribbon菜单工具栏 和 按钮事件
1、Ribbon菜单工具栏
1.1 参考资料:
【1】 http://www.drdobbs.com/windows/whats-new-in-wpf-45/240009614
【2】 http://www.cnblogs.com/gnielee/archive/2010/05/10/wpf4-ribbon-quick-access-toolbar.html
【3】 Apress.Pro.WPF.4.5.in.VB.Dec.2012.pdf
1.2 概述
前两篇资料基本足够用。其实,文献 【3】的下列代码:
<r:RibbonWindow x:Class="RibbonTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height = "350" Width = "525" xmlns:r= "clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly = RibbonControlsLibrary"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" > </RowDefinition> <RowDefinition > </RowDefinition> </Grid.RowDefinitions> <r:Ribbon> </r:Ribbon> </Grid> </r:RibbonWindow>
将上述代码中所有的
r:Ribbon
更改为
Ribbon
按书上的步骤就可以了。
1.3 总结
其实可看作是以一个窗口类的实例替换了窗口类。细节可能较多,但主要就是下列三块。
一、文件头
二、Ribbon布局容器
三、在Ribbon容器内分别放置“快速访问栏”、“New菜单” 和 “功能区” 。其中功能区每一个“选项卡”为一块。
代码及说明如下。
1.3.1 文件头
<RibbonWindow x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:AlcIteApp1" VerticalContentAlignment="Center" Icon="Images/logo.png" Title="ALC Develop Toos Environment" Width="800" Height="600" SnapsToDevicePixels="True" Background="{DynamicResource {x:Static SystemColors.AppWorkspaceBrushKey}}" WindowState="Maximized">
注意,里面已经放置了图片。xmlns:local="clr-namespace:AlcIteApp1" 该行与Ribbon无关。就是把Window改为RibbonWindow而已。当然,要先添加“引用”见文献【1】
1.3.2 Ribbon布局容器内的代码
<!-- ****停靠容器*************************************************************************** --> <DockPanel LastChildFill="True" > <!-- **** 1、Ribbon ******************************************************************** --> <Ribbon x:Name="Ribbon" SelectedIndex="0" DockPanel.Dock="Top" > <!-- ****Quick Access Toolbar - located at the upper-left corner**************** --> <Ribbon.QuickAccessToolBar> <RibbonQuickAccessToolBar Height="23" VerticalContentAlignment="Center" HorizontalContentAlignment="Stretch"> <RibbonButton x:Name ="Save" SmallImageSource="Images\save.png" /> <RibbonSplitButton x:Name ="Undo" SmallImageSource="Images\undo.png" > <RibbonSplitMenuItem Header="Undo action #1" /> <RibbonSplitMenuItem Header="Undo action #2" /> <RibbonSplitMenuItem Header="Undo action #3" /> </RibbonSplitButton> <RibbonSplitButton x:Name="Redo" SmallImageSource="Images\redo.png" > <RibbonSplitMenuItem Header="Redo action #1" /> <RibbonSplitMenuItem Header="Redo action #2" /> </RibbonSplitButton> </RibbonQuickAccessToolBar> </Ribbon.QuickAccessToolBar> <!-- ****菜单标题栏************************************************************* --> <!-- ****Help Pane, located at the right-hand side************************** --> <Ribbon.HelpPaneContent> <RibbonButton SmallImageSource="Images\help.png" /> </Ribbon.HelpPaneContent> <!-- ****Application Menu, located at the left-hand side (down arrow)******* --> <Ribbon.ApplicationMenu> <!-- ****Application Menu*********************************************** --> <RibbonApplicationMenu x:Name="ClipboadGroup" Label="Cliboard" KeyTip="F" SmallImageSource="images\logo.png" Height="23"> <!-- 新建项(含二级菜单项) --> <RibbonApplicationMenuItem Header="新建" ImageSource="images\NewFile.png" KeyTip="N"> <RibbonApplicationMenuItem Header="向导" ImageSource="images\flagYellow.png" KeyTip="W" /> <RibbonApplicationMenuItem Header="设计" ImageSource="images\folder.png" KeyTip="S"/> </RibbonApplicationMenuItem> <!-- 打开项(仅一级菜单项) --> <RibbonApplicationMenuItem Header="打开" ImageSource="Images\open.png" /> <RibbonApplicationMenuItem Header="保存" ImageSource="Images\save.png" /> <RibbonApplicationMenuItem Header="打印" ImageSource="Images\print.png" /> <!-- 分隔符 --> <RibbonSeparator ></RibbonSeparator> <RibbonApplicationMenuItem Header="Exit" ImageSource="Images\exit.png" /> <!-- 分隔符 --> <RibbonSeparator ></RibbonSeparator> <RibbonApplicationMenuItem Header="选项" ImageSource="Images\gear.png" /> </RibbonApplicationMenu> </Ribbon.ApplicationMenu> <!-- ****Ribbon Tab #1: 编辑************************************************ --> <RibbonTab Header="编辑" KeyTip="E" > <!-- Home/Clipboard group--> <RibbonGroup x:Name="ClipboardGroup" Header="Clipboard" > <RibbonButton LargeImageSource="Images\paste.png" Label="Paste" KeyTip="V" /> <RibbonButton LargeImageSource="Images\cut.png" Label="Cut" KeyTip="X" /> <RibbonButton LargeImageSource="Images\copy.png" Label="Copy" KeyTip="C" /> </RibbonGroup> <!-- Home/Clear group--> <RibbonGroup x:Name="设备" Header="设备" > <RibbonRadioButton LargeImageSource="Images\clear.png" Label="清除端口" KeyTip="R" /> <RibbonRadioButton LargeImageSource="Images\clear_all.png" Label="清除全部" KeyTip="G" /> </RibbonGroup> </RibbonTab> <!-- ****Ribbon Tab #2: 操作************************************************ --> <RibbonTab Header="操作" KeyTip="L"> <!-- Launch/Applications group--> <RibbonGroup x:Name="Oprate" Header="Oprate"> <RibbonRadioButton LargeImageSource="Images\Built.png" Label="编译" KeyTip="B" IsChecked="True"/> <RibbonRadioButton LargeImageSource="Images\Import.png" Label="导入" KeyTip="I"/> <RibbonRadioButton LargeImageSource="Images\Export.png" Label="导出" KeyTip="E"/> </RibbonGroup> <!-- Launch/烧写 group--> <RibbonGroup x:Name="App" Header="Apps"> <RibbonRadioButton LargeImageSource="Images\PromRe.png" Label="读出" KeyTip="R" IsChecked="True"/> <RibbonRadioButton LargeImageSource="Images\PromWr.png" Label="烧写" KeyTip="W"/> <RibbonRadioButton LargeImageSource="Images\check.png" Label="校验" KeyTip="C"/> </RibbonGroup> </RibbonTab> </Ribbon> <!-- **** 2、状态栏 ************
我使用了一个停靠容器。Ribbon容器放在里面。
就是这样。
2、按钮事件
2.1 按钮的样式
在Application.XMAL 文件中定义,代码如下
<Application x:Class="Application" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml" ShutdownMode="OnMainWindowClose" Activated="Application_Activated" Exit="Application_Exit" DispatcherUnhandledException="Application_DispatcherUnhandledException" > <Application.Resources> <Style x:Key="BigButtonStyle"> <Setter Property="Button.FontFamily" Value="Times New Roman" /> <Setter Property="Button.FontSize" Value="24" /> <Setter Property="Button.FontWeight" Value="Bold" /> <Setter Property="Button.Foreground" Value="Red"/> <Setter Property="Button.Height" Value="100"/> <Setter Property="Button.Width" Value="130"/> <Setter Property="Button.Background" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/> </Style> <Style x:Key="SmallButtonStyle"> <Setter Property="Button.FontFamily" Value="Times New Roman" /> <Setter Property="Button.FontSize" Value="24" /> <Setter Property="Button.FontWeight" Value="Bold" /> <Setter Property="Button.Foreground" Value="Red"/> <Setter Property="Button.Height" Value="55"/> <Setter Property="Button.Width" Value="100"/> <Setter Property="Button.Background" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/> <Setter Property="Button.Margin" Value="0,3,0,3"/> <Setter Property="Button.Padding" Value="3"/> </Style> <Style x:Key="StartGroupBoxStyle"> <Setter Property="GroupBox.FontFamily" Value="Times New Roman" /> <Setter Property="GroupBox.FontSize" Value="18" /> <Setter Property="GroupBox.FontWeight" Value="Bold" /> <Setter Property="GroupBox.Foreground" Value="Gray" /> <Setter Property="GroupBox.Height" Value="150"/> <Setter Property="GroupBox.Width" Value="130"/> <Setter Property="GroupBox.Background" Value="{DynamicResource {x:Static SystemColors.ControlDarkBrushKey}}"/> </Style> </Application.Resources> </Application>
2.2 在自定义用户控件中的使用方法
<Button Content="烧写" Style="{StaticResource SmallButtonStyle}" Click="writeProm_Click" />
2.3 添加事件
开始在Ribbon窗口中,使用一个容器,做了几个按钮,遇到无法添加事件的问题。
后来把那些按钮做成一个用户控件,在用户控件中,可以通过“属性面板”添加事件,曾遇到“解析”问题及“不在。。中”的问题。
“解析”问题的解决方法:通过“属性面板”添加事件,然后再修改按键名字,比如 Button_Click1 改为 help_Click
“不在。。中”的问题的解决方法:每个按键若先起了名字,都要通过“属性面板”添加事件的办法过滤一遍,方法的代码可以空着,但必须都有且名字一致且是经“属性面板”添加。