使用功能区作为选项卡控件

时间:2009-02-14 18:35:12

标签: .net wpf user-interface ribbon

我想使用功能区界面创建应用程序,其外观和行为如下:

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

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

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

我读了“OFFICE FLUENT™用户界面设计指南”,它描述了你能做什么 不能用丝带,但我找不到任何关于这个。

7 个答案:

答案 0 :(得分:3)

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

虽然斯科特有点认为它可能与微软打算使用功能区有些形成对比,但它认为功能区也适合这种用途。 因为如果你想要一个传统的标签,像迈克尔建议你需要按钮在窗口或任务之间切换。通过使用功能区,您可以直接将控制功能/按钮与任务“选项卡”链接起来,从而更容易了解哪些按钮与哪个任务相关联。用于整个应用程序的按钮可以集成到Office按钮(左上角的大型Office徽标)中,这实际上正是Microsoft所做的。

我们目前正在实施一个类似于Ribbon的工具栏,所以可能我并不完全客观。但是我倾向于认为功能区非常简单,并且用户可以轻松发现按钮。一个侧面说明:这也可以通过使用大型徽标和下拉图库来实现,大多数功能区包都可以实现这些功能,因此无需自己编写代码(除非您可以非常轻松地实现)!

答案 1 :(得分:3)

我找到了Southridge Hands-on-Lab on Codeplex。在实验3中,有一个功能区控件示例,与我打算使用的方式类似。

Southridge实验室由微软完成,因此,我认为,我可以像这个例子那样做。

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:2)

如果每个标签的命令很少(少于20个),那么您可能应该使用传统的标签控件,按钮用于顶部或标签页中其他位置的命令。这也可以让您选择在选项卡控件之外使用适用于整个应用程序的按钮(例如,退出,首选项),这将有助于使用户明白其范围(使用功能区无法做到的事情)。

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

答案 4 :(得分: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;

答案 5 :(得分:0)

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

InitPanels

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()

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

希望这有帮助。

约什

答案 6 :(得分:0)

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