使用Ribbon作为选项卡控件

6
我想创建一个具有功能区界面的应用程序,看起来和行为类似于这样:
  • 应用程序有一个带有功能区的主窗体
  • 功能区有多个选项卡
  • 当用户在功能区上切换选项卡时,位于功能区下方的面板会更改并显示与功能区面板相关的内容。这样,功能区选项卡就像是整个窗口的选项卡。
例如,功能区有两个选项卡:人员和任务。当当前功能区面板为“人员”时,下方的面板将显示人员数据网格。功能区包含用于操作人员数据的命令。当用户切换到功能区上的“任务”选项卡时,应用程序应该在功能区下方显示任务表单。
问题是,在这种情况下可以使用功能区吗?
我阅读了“OFFICE FLUENT™用户界面设计指南”,其中描述了您可以和不能使用功能区的内容,但我找不到任何关于此的信息。
7个回答

3
我在Codeplex上找到了Southridge Hands-on-Lab。在第三个实验室中,有一个类似于我想要做的样式的功能区控件示例。
由于Southridge实验室是由微软开发的,所以我认为我可以使用与此示例相同的方法。

3

简述:我认为它适用于您的应用概念,但必须明确区分人和任务功能才能使其发挥作用!

虽然斯科特有点说法可能与微软打算使用 Ribbon 有所不同,但我认为 Ribbon 也适合这种用途。 因为如果您想要像迈克尔建议的传统选项卡,您需要按钮来切换窗口或任务。通过使用 Ribbon,您直接将控制功能/按钮与任务选项卡联系起来,使学习哪个按钮链接到哪个任务变得更加容易。用于整个应用程序的按钮可以集成到 Office 按钮中(位于左上角的大型 Office 徽标),这实际上正是微软所做的。

我们目前也正在实现类似 Ribbon 的工具栏,所以我可能不完全客观。但是我倾向于认为 Ribbon 工作非常简单,能够让用户轻松地发现按钮。一件副产品:这也可以通过使用大型徽标和下拉库实现,只是大多数可用的 Ribbon 包已经实现了这些内容,因此无需自己编写代码(除非您非常容易)!


2
你所提议的方案与微软的指南相悖,你可能会违反他们的指南。
功能区应该与以文档为中心的应用程序一起使用,其中有一个文档,并且您可以使用功能区中的命令来操作它。标签页只用于导航功能区...而不是导航您的应用程序。
(话虽如此...我知道有些应用程序使用了你描述的功能区方式...并且似乎非常好用!)
当我们实现使用功能区时,我也遇到了类似的困难。对于下一个版本,我们将回到上下文敏感的工具栏 :)

谢谢您的评论。您是否有一些使用功能区进行导航的应用程序链接? - zendar

2
如果您的每个选项卡中的命令很少(少于20个),那么也许您应该使用传统的选项卡控件,其中包括用于在选项卡顶部或其他位置的按钮执行命令。这还将为您提供在选项卡控件之外拥有适用于整个应用程序的按钮(例如退出、首选项),这将有助于使其范围对用户清晰可见(这是使用功能区无法实现的)。
如果您的用户需要比较“选项卡”之间的信息,则根本不要使用选项卡,而是使用单独的主窗口(例如一个用于人员,另一个用于任务)。每个窗口都可以有自己独特的传统菜单栏和工具栏,用户可以将窗口并排放置在屏幕上进行工作,而不是使用选项卡控件来回切换。

1
使用 OnTabChange 事件将适当的面板带到前台视图:
procedure TForm1.Ribbon1TabChange(Sender: TObject; const NewIndex,
  OldIndex: Integer; var AllowChange: Boolean);
begin
  case NewIndex of
    0: Panel0.BringToFront;

    1: Panel1.BringToFront;

    2: Panel2.BringToFront;

    3: Panel3.BringToFront;

  end;
end;

0
新版的WPF Ribbon没有与之前版本相同的限制。

0

顺便提一下,我已经玩过devexpress的xtrabar套件,并使用标签属性实现了这个选项卡控件行为。我为每个功能区页创建一个面板控件,然后执行以下操作:

初始化面板

RibPage1.tag = Panel1
RibPage2.tag = Panel2

' Set Display Properties
'Panel1 displays initially

With Panel1
   .Dock = Fill
   .Show()
End With

With Panel2
   .Dock = Fill
   .Hide()
End With

Ribbon.SelectedPage = RibPage1

选定页面上的 Ribbon 改变

P as Panel = ctype(sender.tag, Panel)
p.hide()

选定页面上的 Ribbon 已更改

P as Panel = ctype(sender.tag, Panel)
p.Show()

我是编程新手,可能有更好的方法来处理这个问题,但这种方法对我有效。可能也取决于使用的 Ribbon 供应商。

希望这会有所帮助。

Josh


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接