快速访问工具栏(Quick Access Toolbar,简称QAT)是Windows Ribbon界面设计中的一项重要功能。它位于窗口标题的左侧,允许用户将常用的Ribbon命令保存在这里,以便快速访问。用户可以通过右键点击Ribbon上的按钮(或切换按钮、复选框),并选择“添加到快速访问工具栏”来将它们添加到QAT中。
开发者可以通过Ribbon标记(Ribbon Markup)来指定一组“默认按钮”(例如:新建、打开、保存)。此外,开发者还可以通过代码动态地添加命令。Ribbon的另一个特性是能够保存和加载命令列表。利用这个特性,在应用程序会话之间保存和加载设置,可以为用户提供一致的UI体验。
更多详细信息可以在MSDN的页面找到。
以下是一个使用QuickAccessToolbar的示例:
<Application.Views>
<Ribbon>
<Ribbon.QuickAccessToolbar>
<QuickAccessToolbar CommandName='cmdQAT' CustomizeCommandName='cmdCustomizeQAT'>
<QuickAccessToolbar.ApplicationDefaults>
<Button CommandName='cmdButtonNew' ApplicationDefaults.IsChecked='true' />
<Button CommandName='cmdButtonOpen' ApplicationDefaults.IsChecked='false' />
<Button CommandName='cmdButtonSave' ApplicationDefaults.IsChecked='false' />
</QuickAccessToolbar.ApplicationDefaults>
</QuickAccessToolbar>
</Ribbon.QuickAccessToolbar>
<Ribbon.Tabs>
<Tab CommandName='cmdTabMain'>
<Group CommandName='cmdGroupFileActions' SizeDefinition='ThreeButtons'>
<Button CommandName='cmdButtonNew' />
<Button CommandName='cmdButtonOpen' />
<Button CommandName='cmdButtonSave' />
</Group>
</Tab>
</Ribbon.Tabs>
</Ribbon>
</Application.Views>
如所见,QuickAccessToolbar元素定义了两个命令名称。第一个是通过属性CommandName标识的,表示实际的快速访问工具栏命令。第二个是通过属性CustomizeCommandName标识的,表示“更多命令…”按钮的命令。如果指定了“更多命令…”按钮,它可以用于打开一个由应用程序定义的对话框,以便选择更多的命令添加到QAT中。
标记中还使用了QuickAccessToolbar.ApplicationDefaults元素,允许开发者指定哪些项将出现在QAT弹出菜单中。每个项都可以用IsChecked属性标记,这样该项就会出现在QAT中。
private Ribbon _ribbon;
private RibbonQuickAccessToolbar _ribbonQuickAccessToolbar;
public Form1()
{
InitializeComponent();
_ribbon = new Ribbon();
_ribbonQuickAccessToolbar = new RibbonQuickAccessToolbar(_ribbon,
(uint)RibbonMarkupCommands.cmdQAT,
(uint)RibbonMarkupCommands.cmdCustomizeQAT);
// 注册到QAT自定义按钮
_ribbonQuickAccessToolbar.OnExecute += new OnExecuteEventHandler(_ribbonQuickAccessToolbar_OnExecute);
}
请注意,自定义QAT按钮是可选的,如果没有声明,应该使用RibbonQuickAccessToolbar类的另一个构造函数。
void _ribbonQuickAccessToolbar_OnExecute(PropertyKeyRef key, PropVariantRef currentValue,
IUISimplePropertySet commandExecutionProperties)
{
MessageBox.Show("打开自定义命令对话框...");
}
开发者应该加载一个对话框,允许用户选择命令,然后通过操作命令列表来设置它们。
void _buttonNew_OnExecute(PropertyKeyRef key, PropVariantRef currentValue,
IUISimplePropertySet commandExecutionProperties)
{
// 更改QAT命令列表
IUICollection itemsSource = _ribbonQuickAccessToolbar.ItemsSource;
itemsSource.Clear();
itemsSource.Add(new GalleryCommandPropertySet() { CommandID = (uint)RibbonMarkupCommands.cmdButtonNew });
itemsSource.Add(new GalleryCommandPropertySet() { CommandID = (uint)RibbonMarkupCommands.cmdButtonOpen });
itemsSource.Add(new GalleryCommandPropertySet() { CommandID = (uint)RibbonMarkupCommands.cmdButtonSave });
}
这段代码与操作gallery的命令列表的代码非常相似。
private Stream _stream;
void _buttonSave_OnExecute(PropertyKeyRef key, PropVariantRef currentValue,
IUISimplePropertySet commandExecutionProperties)
{
// 保存Ribbon QAT设置
_stream = new MemoryStream();
_ribbon.SaveSettingsToStream(_stream);
}
void _buttonOpen_OnExecute(PropertyKeyRef key, PropVariantRef currentValue,
IUISimplePropertySet commandExecutionProperties)
{
// 加载Ribbon QAT设置
_stream.Position = 0;
_ribbon.LoadSettingsFromStream(_stream);
}