Windows Ribbon for WinForms,第 16 部分 – ApplicationModes





5.00/5 (12投票s)
在本文中,我将介绍如何使用 ribbon 应用程序模式。
这系列 CodeProject 文章基于我首先在我的 博客上发表的一系列帖子。
Windows Ribbon for WinForms 库现在支持应用程序模式。这篇文章的结果是另一个示例,"13-ApplicationModes",可以在项目站点上找到。
什么是应用程序模式?
最好用例子来解释。应用程序有时有不同的“模式”,在这些模式下它们显示不同的 GUI,例如
- 简单模式 vs. 高级模式
- 常规编辑器模式 vs. 打印模式
ribbon 框架支持根据当前应用程序模式更改其 GUI。为了使用 ribbon 应用程序模式,您需要
- 为每个 ribbon 项设置可用的应用程序模式。这是在设计时完成的。
- 设置当前的应用程序模式。这是在运行时完成的。
总而言之,应用程序模式是一项功能,允许 ribbon 根据当前的应用程序上下文更改其 GUI。
有关此主题的更多详细信息,请参见 MSDN 上的 使用应用程序模式重新配置 Ribbon。
使用 ApplicationModes - 额外说明
- 您可以设置最多 32 种不同的应用程序模式,每种模式由 0 到 31 之间的数字标识。
- 模式可以共存,这意味着您可以同时将简单模式和高级模式设置为活动状态。在内部,当前的应用程序模式由单个 32 位变量表示(它表示大小为 32 的布尔数组),从而解释了为什么您只能拥有 32 种模式。
- 模式 0 是默认模式。因此,如果您没有设置
ApplicationModes
属性,则 0 为默认值。 - 至少应始终设置一种模式。您无法禁用所有模式(框架只会忽略您的最后一次设置)。
使用 ApplicationModes - Ribbon 标记
以下是视图部分的示例,您可以在其中设置 ApplicationModes
属性
<Application.Views>
<Ribbon>
<Ribbon.Tabs>
<Tab CommandName="cmdTabMain" ApplicationModes="0,1">
<Group CommandName="cmdGroupCommon"
SizeDefinition="ThreeButtons"
ApplicationModes="0,1">
<Button CommandName="cmdButtonNew" />
<Button CommandName="cmdButtonOpen" />
<Button CommandName="cmdButtonSave" />
</Group>
<Group CommandName="cmdGroupSimple"
SizeDefinition="TwoButtons"
ApplicationModes="0">
<Button CommandName="cmdButtonSwitchToAdvanced" />
<Button CommandName="cmdButtonDropA" />
</Group>
<Group CommandName="cmdGroupAdvanced"
SizeDefinition="FourButtons"
ApplicationModes="1">
<Button CommandName="cmdButtonSwitchToSimple" />
<Button CommandName="cmdButtonDropA" />
<Button CommandName="cmdButtonDropB" />
<Button CommandName="cmdButtonDropC" />
</Group>
</Tab>
</Ribbon.Tabs>
</Ribbon>
</Application.Views>
在此示例中,我们创建一个选项卡,其中包含三个组:Common、Simple 和 Advanced。 Common 组应始终显示,因此我们将其 ApplicationModes
属性设置为“0,1”。 Simple 组应仅在简单模式 (0) 下显示。 类似地,Advanced 组应仅在高级模式 (1) 下显示。 请注意,选项卡元素应在两种模式下都显示,因此您还必须将其 ApplicationModes
属性设置为“0,1”。
可以在以下元素上设置 ApplicationModes
- 核心选项卡(与上下文选项卡相对)。
- 作为核心选项卡子级的组。
Button
、SplitButton
和DropDownButton
,但仅当这些控件位于应用程序菜单中时。
ApplicationModes - 代码隐藏
以下是两个 ribbon 按钮,“简单”和“高级”,每个按钮都会更改当前的应用程序模式
private Ribbon _ribbon;
private RibbonButton _buttonSwitchToAdvanced;
private RibbonButton _buttonSwitchToSimple;
public Form1()
{
InitializeComponent();
_ribbon = new Ribbon();
_buttonSwitchToAdvanced = new RibbonButton(_ribbon,
(uint)RibbonMarkupCommands.cmdButtonSwitchToAdvanced);
_buttonSwitchToSimple = new RibbonButton(_ribbon,
(uint)RibbonMarkupCommands.cmdButtonSwitchToSimple);
_buttonSwitchToAdvanced.OnExecute +=
new OnExecuteEventHandler(_buttonSwitchToAdvanced_OnExecute);
_buttonSwitchToSimple.OnExecute +=
new OnExecuteEventHandler(_buttonSwitchToSimple_OnExecute);
}
void _buttonSwitchToAdvanced_OnExecute(PropertyKeyRef key, PropVariantRef currentValue,
IUISimplePropertySet commandExecutionProperties)
{
_ribbon.SetModes(1);
}
void _buttonSwitchToSimple_OnExecute(PropertyKeyRef key, PropVariantRef currentValue,
IUISimplePropertySet commandExecutionProperties)
{
_ribbon.SetModes(0);
}
Ribbon.SetModes
方法只是一个简单的包装器,可将字节数组转换为紧凑的 32 位整数并将其传递给相关的框架函数
public void SetModes(params byte[] modesArray)
{
// check that ribbon is initialized
if (!Initalized)
{
return;
}
// calculate compact modes value
int compactModes = 0;
for (int i = 0; i < modesArray.Length; ++i)
{
if (modesArray[i] >= 32)
{
throw new ArgumentException("Modes should range between 0 to 31.");
}
compactModes |= (1 << modesArray[i]);
}
// set modes
Framework.SetModes(compactModes);
}
目前就到这里为止。