Skip to content

XAML Ribbon #168

@adambarlow

Description

@adambarlow

Proposal: XAML Ribbon

image

Summary

tl:dr; Provide a Ribbon control for XAML apps which utilizes recent advancements in XAML commanding infrastructure, which is simple to implement and simple to interact with.

Since the release of the ribbon in Microsoft Office products in 2007 it has been a successful and frequently imitated commanding paradigm. It's success is demonstrated in the many implementations in frameworks on various platforms, as well as the ongoing requests for it's inclusion in WinUI.

This proposal details the creation of a simplified single-row Ribbon control, which can natively host XAML controls with great styling out of the box. This ribbon control will be familiar to those who have worked with the commandbar control and will allow for apps with more advanced commanding capabilities than are currently possible with XAML.

Rationale

Implementing a XAML Ribbon will provide the following for the community:

  1. Allow for the creation of apps that scale to have offer many commands to users (e.g sophisticated apps with more commands than comfortably fit in, say, a current XAML commandbar)
  2. Provide users with commanding UX which is familiar, usable, and coherent with what they see across other apps on Windows (e.g. Microsoft Office)
  3. Provide a commanding surface that complements our existing suite of XAML commanding assets (e.g. button, ToggleButton, SplitButton, XamlUICommand, StandardUICommand, CommandBarFlyout, CommandBar, Menubar, etc.)

Terminology

  • Ribbon A set of toolbars that are grouped by tabs
  • QAT "Quick Access Toolbar" a small group of commands in the Ribbon which always stays around no matter which tab currently has focus
  • Contextual Tab A tab of commands representing actions that are available only because of the current app context
  • File Menu A section of the Ribbon which contains commonly used commands that refer to the document in general or the app in general. Commonly used for, "open, save, close, etc."
  • Chunk A sub-section of a given tab. These can be named and are separated by vertical separators
  • Overflow An area which contains commands that do not fit in the currently visible ribbon tab

Functional Requirements

# Feature Priority Wave
1 Basic Ribbon tabbing experience (e.g. a tabbed set of command bars) Must 0
2 Animation when switching tabs Should 1
3 Contextual tabbing support Should 1
4 Support for overflow of items (one per tab) Must 1
4.1 Ability for the end-user to add and remove items from the overflow Could 2
4.2 Split or dropdown buttons in the overflow have cascading menus Should 1
4.3 Overflow area organized by the ‘chunk’ commands came from Could 2
5 Supports resize behavior (e.g. losing labels, dropping commands into the overflow for each tab on window resize Should 1
5.1 Support for mandatory text labels Should 1
6 Optional built-in menu for ‘File Menu' (a contextflyout hosted in the ribbon for commands like Save and Open) Should 1
7 Support for a QAT menu for frequently used commands Should 1
7.1 Ability for end-users to add / remove items from the QAT Could 2
8 Able to host a set of commonly used controls in the control without the need to style them (drop in support)
List:
- Button
- Split Button
- DropDown Button
- Combo-box
- Toggle Button
Should 1
9 Ability to host arbitrary XAML (developer would not get styling for free) Should 1
10 Supports icon only commands Should 1
11 Integrates with XamlUICommand registry (when developed) Could 1
12 Built-in search bar across XamlUICommand registry Could 2

Open Questions

  • What is the object model for Ribbon (is it multiple command bars in a tabbing control? QAT as a separate commandbar, file menu as a MenuFlyout?)
  • How do we achieve the drop in styling? (is it an interface, like IRibbonStylable that Button, DropDownButton, etc. implement?)

Metadata

Metadata

Assignees

No one assigned

    Labels

    feature proposalNew feature proposalneeds-triageIssue needs to be triaged by the area ownersteam-ControlsIssue for the Controls teamwct

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions