6

我想创建具有如下外观和行为的功能区界面的应用程序:

  • 应用程序有一个带丝带的主要形式
  • 功能区有多个选项卡
  • 当用户在功能区上切换选项卡时,功能区下方的面板会更改并显示与功能区面板相关的内容。这样,功能区选项卡的作用就好像它是整个窗口的选项卡。

例如,功能区有两个选项卡:人员和任务。当前功能区面板为“人员”时,功能区下方显示人员数据网格。功能区包含用于操作人员数据的命令。当用户切换到功能区上的“任务”选项卡时,应用程序应在功能区下方显示带有任务的表单。

问题是在这种情况下可以使用功能区吗?

我阅读了“OFFICE FLUENT™ 用户界面设计指南”,其中描述了您可以使用 Ribbon 做什么和不能做什么,但我找不到任何相关信息。

4

7 回答 7

3

TLDR:我认为它适合您的应用程序概念,但必须明确区分人员和任务功能才能使其正常工作!

尽管 Scott 认为它可能与 Microsoft 打算使用 Ribbon 的目的有所不同,但它认为 Ribbon 也适合这种用途。因为如果您想拥有像 Michael 建议的常规选项卡,您将需要按钮来在窗口或任务之间切换。通过使用功能区,您可以将控制功能/按钮直接链接到任务选项卡,从而更容易了解哪些按钮与哪些任务相关联。用于整个应用程序的按钮可以集成到 Office 按钮(左上角的大 Office 徽标)中,这实际上正是微软所做的。

我们目前也在实现一个类似功能区的工具栏,所以我可能并不完全客观。然而,我倾向于认为 Ribbon 的工作非常简单,并且使用户能够轻松地发现按钮。附带说明:这也可以通过使用大徽标和下拉库来实现,大多数可用的功能区包都实现了这些东西很容易,所以不需要自己编写代码(除非你很容易)!

于 2009-03-27T09:05:11.607 回答
3

在 Codeplex 上找到了 Southridge Hands-on-Lab。在实验室 3 中,有一个功能区控制示例,其使用方式与我的意图类似。

Southridge 实验室是由 Microsoft 完成的,所以我想我可以像这个例子一样做。

于 2010-01-08T18:56:02.113 回答
2

您的建议与 Microsoft 的指导方针相反。您可能违反了他们的指导方针。

功能区应该与以文档为中心的应用程序一起使用,其中有一个文档并且您在功能区中有用于操作它的命令。功能区上的选项卡仅用于导航功能区......而不是用于导航您的应用程序。

(话虽如此......我知道一些应用程序以你描述的方式使用功能区......而且它似乎工作得很好!)

在实现我们的应用程序以使用功能区时,我遇到了类似的头痛。对于下一个版本,我们将回到上下文相关工具栏 :)

于 2009-02-14T18:57:05.547 回答
2

如果每个选项卡的命令很少(少于 20 个),那么也许您应该使用带有按钮的传统选项卡控件,这些按钮位于选项卡表的顶部或其他位置。这还可以让您选择在选项卡控件之外拥有适用于整个应用程序的按钮(例如,退出、首选项),这将有助于使用户清楚地了解它们的范围(这是您无法使用功能区执行的操作)。

如果您的用户的工作包括比较“选项卡”之间的信息,那么根本不要使用选项卡,而是使用单独的主窗口(例如,一个用于人员,一个用于任务)。然后,每个人都可以拥有自己独特的传统菜单栏和工具栏,用户可以将窗口并排放在屏幕上以完成工作,而不是使用选项卡控件来回切换。

于 2009-02-16T18:24:47.983 回答
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;
于 2009-05-25T21:02:41.363 回答
0

仅供参考,我已经使用了 devexpress 的 xtrabar 套件,并使用 tag 属性实现了这个选项卡控制行为。我为每个功能区页面创建一个面板控件,然后执行以下操作:

初始化面板

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

所选页面上的功能区更改

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

所选页面上的功能区已更改

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

我是编程新手,所以可能有一些更好的方法可以做到这一点,但这似乎对我有用。可能还取决于功能区供应商。

希望这可以帮助。

乔什

于 2009-04-06T20:04:30.890 回答
0

新版本的 wpf 功能区颂歌与以前的版本没有相同的限制。

于 2010-08-23T18:22:40.080 回答