DCSIMG
Windows Ribbon for WinForms, Part 6 – Tabs, Groups and HelpButton - Arik Poznanski's Blog

Arik Poznanski's Blog

It CAN be done with .NET

News

MVP

MCC

CodeProject MVP

MCPD

MCTS

Subscribe to my blog by email

Arik Poznanski LinkedIn Profile

Email: arik.com at gmail dot com
or, use this form

Locations of visitors to this page


Sela Group

Sela Canada

DZone MVB

Links

Official Blogs

WPF / SL Blogs

Developers Blogs

Windows Ribbon for WinForms, Part 6 – Tabs, Groups and HelpButton

First, your should know that I changed my ribbon library such that Ribbon class is no longer a singleton.
The reason is that I wanted to make an application with two forms, each form has its own ribbon, so needed two ribbon objects.. So this had to change.

Second, in this post I’ll review some more common ribbon features, namely:

  • Tabs
  • Groups
  • Help Button

The result of this post is yet another sample application, named 04-TabGroupHelp. You can find on the project page and it looks like this:

image

Buttons, Buttons, Buttons
So what are tabs? Just containers for other controls. In this sample will use only buttons. I’ll elaborate on the other control types on future posts.

Every tab can contain several groups, which are just a logical division of the controls in the tab, in this post – buttons..

What is the help button? just another button. For some reason it got its own special place and predefined icon (look on the right side of the image).

Using Tabs and Groups
The commands markup is always the same, just a list of items that attach a mnemonic used by the programmer with an ID used by the ribbon framework. And some string and bitmap resources.

As always the interesting part lies in the views markup:

<Application.Views>
  <Ribbon>
    <Ribbon.Tabs>
      <Tab CommandName="cmdTabMain">
        <!-- scary part -->
        <Tab.ScalingPolicy>
          <ScalingPolicy>
            <ScalingPolicy.IdealSizes>
              <Scale Group="cmdGroupFileActions" Size="Large" />
              <Scale Group="cmdGroupExit" Size="Large" />
            </ScalingPolicy.IdealSizes>
            <Scale Group="cmdGroupFileActions" Size="Medium" />
          </ScalingPolicy>
        </Tab.ScalingPolicy>
        <!-- useful part -->
        <Group CommandName="cmdGroupFileActions" SizeDefinition="ThreeButtons">
          <Button CommandName="cmdButtonNew" />
          <Button CommandName="cmdButtonOpen" />
          <Button CommandName="cmdButtonSave" />
        </Group>
        <Group CommandName="cmdGroupExit" SizeDefinition="OneButton">
          <Button CommandName="cmdButtonExit" />
        </Group>
      </Tab>
      <Tab CommandName ="cmdTabDrop">
        <Group CommandName="cmdGroupDrop" SizeDefinition="ThreeButtons">
          <Button CommandName="cmdButtonDropA" />
          <Button CommandName="cmdButtonDropB" />
          <Button CommandName="cmdButtonDropC" />
        </Group>
      </Tab>
    </Ribbon.Tabs>
  </Ribbon>
</Application.Views>

What I’ve defined in this markup is two tabs. The first tab has two groups and the second tab has one group.
I’ve marked to important parts of the markup in the first tab. Unfortunately, due to the ribbon schema definition the scary part must come before the useful part.

The useful part:
just a simple definition of the groups in the tab, and the controls in the group. one interesting thing to note is the SizeDefinition attribute on the Group tag. This is a definition of the layout for the controls in the group. You can define your own layouts or use a predefined list which usually is quite enough. see the full list (with convenient images) at “Customizing a Ribbon Through Size Definitions and Scaling Policies” on MSDN.

The scary part:
In order to understand this part you should know that one of the features of the ribbon framework is the ability to re-layout your ribbon controls according to the amount of space it has. It pretty much handle this automatically but it does requires you to define hints on how you want your layout to scale when the application form gets smaller and smaller. So in the scary part we first define the ideal size of each group. The size can be one of four values: Large, Medium, Small and Popup. Popup means that the whole group was shrunk to a single icon that upon clicking popups the original group.

After defining the ideal size for the group you can define the order of scaling down, meaning which group should scale down first. In this way you can make your application most important controls more visible then less important ones.

The code-behind for acting on these buttons is the same as in the previous posts, just handle Execute function of the correct command ID.

Update (18.11.2009): Just register to the OnExecute event of the correct button.

Using Help Button
To use the help button just add the following to the views markup:

<Application.Views>
  <Ribbon>
    <Ribbon.HelpButton>
      <HelpButton CommandName="cmdHelp" />
    </Ribbon.HelpButton>
    <Ribbon.Tabs>
      …
    </Ribbon.Tabs>
  </Ribbon>
</Application.Views>

That’s it for now,
Arik Poznanski

kick it on DotNetKicks.com Shout it

Comments

John C. said:

The Office 2010 ribbon is almost identical to the Win7 ribbon, however the transparency of the title bar extends to behind the ribbon tabs.  How can we accomplish this using the Windows 7 ribbon controls?

Also, how can we change the color of the ribbon?

# October 15, 2009 8:17 PM

arik said:

Regarding the transparency, I'm not sure we can, since the Windows 7 Ribbon has its top parts different from the one office uses, at least this is the case in office 2007.

Regarding the ribbon color, I'll cover this in a future post, stay tuned.

# October 15, 2009 9:07 PM

Dima S. said:

Hi Arik,

You accidentally linked to the Ribbon Explorer project... Other than, great stuff, please keep up!

# October 15, 2009 10:00 PM

arik said:

Fixed link, thank you for notifying me.

# October 15, 2009 10:16 PM

John C. said:

Thanks for the update.

Also, since we are using the RibbinMarkup.res file in the Application settings, how do we set the application icon for the executable?

# October 16, 2009 10:12 PM

arik said:

I'll cover this subject also in a future post. The basic idea is not to use RibbonMarkup.res as part of the application, but as part of a resource dll.

# October 16, 2009 10:34 PM

arik said:

# October 27, 2009 9:16 PM

Arik Poznanski's Blog said:

After reviewing the MSDN documentation for the Windows Ribbon Framework I’ve discovered there is only

# December 14, 2009 12:06 AM

Arik Poznanski's Blog said:

First I want to announce that the Windows Ribbon for WinForms library is no longer beta. Since now the

# December 23, 2009 12:30 AM

Arik Poznanski's Blog said:

First I want to announce that the Windows Ribbon for WinForms library is no longer beta. Since now the

# December 23, 2009 12:34 AM

Axel said:

Hi, first of all very ... very nice.

On implementing a simple ExecuteEvent on the Exit Button the application Crahses, with e.g. this.close().

Any Ideas?

# April 8, 2010 11:14 AM

arik said:

# April 14, 2010 12:42 AM

Shaiket said:

I really have to admit, your entire series of posts have been very helpful getting the ribbon up and running for my app. Exactly what I was looking for and very well explained. Thank you!

# June 20, 2010 10:54 PM

arik said:

Thank you Shaiket,

I really appreciate it.

# June 21, 2010 1:59 PM

ThanaSoft Blog » Blog Archive » Windows Ribbon for WinForms said:

Pingback from  ThanaSoft Blog  &raquo; Blog Archive   &raquo; Windows Ribbon for WinForms

# July 5, 2010 12:36 PM

blogs.microsoft.co.il said:

Windows ribbon for winforms part 6 tabs groups and helpbutton.. I like it :)

# April 16, 2011 2:16 AM
Leave a Comment

(required) 

(required) 

(optional)

(required) 


Enter the numbers above: