Click here to Skip to main content
15,851,395 members
Articles / Desktop Programming / Windows Forms

Windows Ribbon for WinForms, Part 17 – Contextual Tabs

Rate me:
Please Sign up or sign in to vote.
5.00/5 (11 votes)
21 Mar 2010Ms-PL2 min read 24.1K   1.6K   15  
In this article, I'll present how to work with ribbon contextual tabs.

This series of CodeProject articles is based on a series of posts I've first published on my blog.

Windows Ribbon for WinForms library now supports Contextual Tabs. The result of this post is yet another sample, "14-ContextualTabs", found on the project site.


What are contextual tabs?

Contextual tabs are additional tabs that appear when you enable their context. For example, in Word, when you select a table in your document, you get two additional tabs (Design and Layout) with commands relevant only to tables.

The basic working unit is a TabGroup, which is a group of contextual tabs with the same context. A TabGroup has a property named ContextAvailable (Property Identifier: UI_PKEY_ContextAvailable) which can have the following values:

  • Active - context is currently available and the tab group should be active (="selected").
  • Available - context is currently available (tabs are not necessarily active).
  • NotAvailable - context is currently not available.

More details on this subject can be found at Displaying Contextual Tabs on MSDN.

Using ContextualTabs - Ribbon Markup

Following is the views section for defining contextual tabs. The commands section is straightforward.

      <TabGroup CommandName='cmdTabGroupTableTools'>
        <Tab CommandName='cmdTabDesign'>
          <Group CommandName='cmdGroupDesign' SizeDefinition='ThreeButtons'>
            <Button CommandName='cmdButtonDesign1' />
            <Button CommandName='cmdButtonDesign2' />
            <Button CommandName='cmdButtonDesign3' />
        <Tab CommandName='cmdTabLayout'>
          <Group CommandName='cmdGroupLayout' SizeDefinition='TwoButtons'>
            <Button CommandName='cmdButtonLayout1' />
            <Button CommandName='cmdButtonLayout2' />
      <Tab CommandName='cmdTabMain'>
        <Group CommandName='cmdGroupMain' SizeDefinition='TwoButtons'>
          <Button CommandName='cmdButtonSelect' />
          <Button CommandName='cmdButtonUnselect' />

Here, we define a single TabGroup for "Table Tools", with two contextual tabs, "Design" and "Layout". Each tab has some buttons in it. In addition, we define in the main tab two buttons that we will use to set and unset the "Table Tools" context.

Using ContextualTabs - Code-Behind

Following is an example of setting the context for a TabGroup, thus making it visible:

private Ribbon _ribbon;
private RibbonTabGroup _tabGroupTableTools;
private RibbonButton _buttonSelect;
private RibbonButton _buttonUnselect;

public Form1()

    _ribbon = new Ribbon();
    _tabGroupTableTools = new RibbonTabGroup(_ribbon, 
    _buttonSelect = new RibbonButton(_ribbon, 
    _buttonUnselect = new RibbonButton(_ribbon, 

    _buttonSelect.OnExecute += new OnExecuteEventHandler(_buttonSelect_OnExecute);
    _buttonUnselect.OnExecute += new OnExecuteEventHandler(_buttonUnselect_OnExecute);

void _buttonSelect_OnExecute(PropertyKeyRef key, PropVariantRef currentValue, 
                             IUISimplePropertySet commandExecutionProperties)
    _tabGroupTableTools.ContextAvailable = ContextAvailability.Active;

void _buttonUnselect_OnExecute(PropertyKeyRef key, PropVariantRef currentValue, 
                               IUISimplePropertySet commandExecutionProperties)
    _tabGroupTableTools.ContextAvailable = ContextAvailability.NotAvailable;

Here, we just register to the ribbon button's Execute events and set the context of the TabGroup accordingly. Of course, in a real application, you might use a more sophisticated logic for setting the context.

That's it for now.


This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)

Written By
Software Developer (Senior) Verint
Israel Israel
Arik Poznanski is a senior software developer at Verint. He completed two B.Sc. degrees in Mathematics & Computer Science, summa cum laude, from the Technion in Israel.

Arik has extensive knowledge and experience in many Microsoft technologies, including .NET with C#, WPF, Silverlight, WinForms, Interop, COM/ATL programming, C++ Win32 programming and reverse engineering (assembly, IL).

Comments and Discussions

-- There are no messages in this forum --