Proposal: XAML Ribbon

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:
- 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)
- Provide users with commanding UX which is familiar, usable, and coherent with what they see across other apps on Windows (e.g. Microsoft Office)
- 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?)
Proposal: XAML Ribbon
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:
Terminology
Functional Requirements
List:
- Button
- Split Button
- DropDown Button
- Combo-box
- Toggle Button
Open Questions