Blue Theme Orange Theme Green Theme Red Theme
 
Home | Forums | Videos | Advertise | Certifications | Downloads | Blogs | Interviews | Jobs | Beginners | Training
 | Consulting  
Submit an Article Submit a Blog 
 Jump to
Skip Navigation Links
TechnologyExpand Technology
WebsiteExpand Website
Team Foundation Server Hosting
Search :       Advanced Search »
Home » WPF » Tab Control in WPF

Tab Control in WPF

In this article I am going to explain how to implement tabcontrol in WPF.

Author Rank :
Page Views : 89512
Downloads : 914
Rating :
 Rate it
Level : Beginner
   Print Read/Post comments Post a comment  Similar Articles  
   Email to a friend  Bookmark  Author's other articles  
Download Files:
TabControl.zip
 
 
Nevron Chart
Become a Sponsor
 Tag Cloud
 Latest Jobs
More ... 
 Latest Interview Questions
More ... 


The Tab control is a common UI element that has been around for some time. It makes a convenient way to organize your window when there is more than could realistically fit and still be comprehensible. Tab Control is easier in Windows Presentation Foundation. Thank to XAML, you can build a tab control from the scratch with markup codes.
Two elements play main roles in building a tab control:

  • TabControl and
  • TabItem
TabControl is the container of one or more TabItem elements like as follows.

<TabControl>
    <TabItem Header="Tab 1">xyz</TabItem>
    <TabItem Header="Tab 2">abc</TabItem>
</TabControl>

Each TabControl can contain a collection of TabItem elements. TabItem has two specific attributes. Header is the string value that you see on top of each tab and IsSelected is a Boolean value that specifies if a tab is selected. Apparently only one tab can be selected at a time otherwise the first tab in list will be selected.

In WPF, Tabs are very easy to implement. Create a new WPF Window, remove the default Grid tags, and add the following XAML: 
 
<TabControl>
    <TabItem Header="Tab 1">xyz</TabItem>
    <TabItem Header="Tab 2">abc</TabItem>
</TabControl>

For example:

Window1.xaml:

<Window x:Class="TabControl.Window1" xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation
xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml
Title="Window1" Height="300" Width="500">
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<StackPanel>
    <Border Background="#99FFFFFF" BorderBrush="#CCCCFF" BorderThickness="2" HorizontalAlignment="Left" Padding="20" Margin="20,10,0,0" Width="400">
        <TabControl Name="Tabs1" TabStripPlacement="Top" Background="LightGray" BorderBrush="Blue" Margin="10,10,0,5">
            <TabItem Header="Name" IsSelected="True" Background="Gray">
                <TextBlock Height="150" Width="200" Margin="0,10,120,0">
                    <Bold>Purushottam Rathore</Bold>
                </TextBlock>
            </TabItem>
            <TabItem Header="Image" Background="Gray">
                <Image Source="ballon.gif" Height="150" Width="200"/>
            </TabItem>

            <
TabItem Header="Hotels" Background="Gray">
                <Image Source="r.jpg" Height="150" Width="200"/>
            </TabItem>
            <TabItem Header="Contact Us" Background="Gray">
                <Grid Height="150" Width="300">
                    <Grid.RowDefinitions>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                        <RowDefinition></RowDefinition>
                    </Grid.RowDefinitions>

                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                        <ColumnDefinition Width="2*"></ColumnDefinition>
                    </Grid.ColumnDefinitions>

                    <
Label HorizontalAlignment="Right" Margin="0,12,0,0" Width="42.033">
Name:</Label>
                    <Label Grid.Row="1" HorizontalAlignment="Right" Margin="0,14,0,0" Width="40.097"> Email:</Label>
                    <TextBox Name="Name" Grid.Column="1" Margin="0,0,0,13" />
                    <TextBox Name="Email" Grid.Column="1" Grid.Row="1" Margin="0,14,0,0" />
                    <Button Grid.Column="1" Grid.Row="2" Width="75" HorizontalAlignment="Left" Name="CoolTabButton" Click="CoolTabButton_Click" Margin="0,15,0,12">OK</Button>

                </Grid>
            </TabItem>

        </TabControl>
    </Border>
</StackPanel>
</ScrollViewer>
</
Window>

tab1.JPG

Figure 1:

TabItem contain the IsSelected property. if you write IsSelected="True" then that tab will select by default. In this example I have write IsSelected="True" in first tab so the first tab named "Name" is select bydefault (In above figure).

Window1.xaml.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace TabControl
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void CoolTabButton_Click(object sender, RoutedEventArgs e)
        {
            TabItem ti = Tabs1.SelectedItem as TabItem;
            MessageBox.Show("This is " + ti.Header + " tab");
        }
    }
}


Now debug the application, you will get follwoing output.

tab2.JPG 

Figure 2:

tab3.JPG 

Figure 3:

tab4.JPG 

Figure 4:

tab5.JPG 

Figure 5:

TabStripPlacement is an attribute that lets you to change the position of tab strip (default is Top). There are four attribute of TabStripPlacement.
  • Top
  • Left
  • Right
  • Bottom
If you write TabStripPlacement="Bottom" then you will get following output

tab6.JPG 

Figure 6: Tabs are at bottom position.

Comment Request!
Thank you for reading this post. Please post your feedback, question, or comments about this post Here.
Login to add your contents and source code to this article
 Article Extensions
Contents added by Mahesh Chand on May 26, 2009
Download File: TabControlWithContextMenu.zip
How to add a Context Menu to a Tab Control

TabItem.ContextMenu is used to add a ContextMenu to a TabItem. The following code snippet creates a TabControl where the first TabItem has a ContextMenu with three Menu items.

<TabControl>
    <TabItem Name="ColorTabItem" Header="Color Tab">
        <TabItem.ContextMenu>
            <ContextMenu MenuItem.Click="ContextMenuClickEventHandler">
                <MenuItem Header="Red" Name="RedMenuItem"/>
                <MenuItem Header="Blue" Name="BlueMenuItem"/>
                <MenuItem Header="Orange" Name="OrangeMenuItem"/>
            </ContextMenu>
        </TabItem.ContextMenu>
        <TabItem.Content>
            Tab Item data here
        </TabItem.Content>
    </TabItem>
    <TabItem Name="ShapeTabItem" Header="Shape Tab"></TabItem>
</TabControl>


Write this click event handler to your code behind.

void ContextMenuClickEventHandler(object sender, RoutedEventArgs e)
{
    if (e.Source == RedMenuItem )
    {               
        ColorTabItem.Header = "Red Item";
        ColorTabItem.Foreground = Brushes.Red;
    }
    else if (e.Source == BlueMenuItem )
    {
        ColorTabItem.Header = "Blue Item";
        ColorTabItem.Foreground = Brushes.Blue;
    }
    else if (e.Source == OrangeMenuItem )
    {
        ColorTabItem.Header = "Orange Item";
        ColorTabItem.Foreground = Brushes.Orange;
    }
}


The output looks like this. Download the attached project for more details.

TabContextMenu.gif
 [Top] Rate this article
 
 About the author
 
Purushottam Rathore

I am working as a Software Developer and has 4 years of experience on Microsoft Technology and having a Master Degree in Computer Application. I really like to work in the .NET platform. and working with ASP.NET 2.0/3.5, Web Services, WPF, WCF, Silverlight, AJAX, JavaScript, JQuery, Ado.net, MsAccess, SQL Server 2005/2008.

Looking for C# Consulting?
C# Consulting is founded in 2002 by the founders of C# Corner. Unlike a traditional consulting company, our consultants are well-known experts in .NET and many of them are MVPs, authors, and trainers. We specialize in Microsoft .NET development and utilize Agile Development and Extreme Programming practices to provide fast pace quick turnaround results. Our software development model is a mix of Agile Development, traditional SDLC, and Waterfall models.
Click here to learn more about C# Consulting.
 
Introducing MaxV - one click. infinite control. Hyper-V Hosting from MaximumASP.
Finally – a virtual platform that delivers next-generation Windows Server 2008 Hyper-V virtualization technology from a managed hosting partner you can truly depend on. Visit www.maximumasp.com/max for a FREE 30 day trial. Hurry offer ends soon. Climb aboard the MaxV platform and take advantage of High Availability, Intelligent Monitoring, Recurrent Backups, and Scalability – with no hassle or hidden fees. As a managed hosting partner focused solely on Microsoft technologies since 2000, MaximumASP is uniquely qualified to provide the superior support that our business is built on. Unparalleled expertise with Microsoft technologies lead to working directly with Microsoft as first to offer IIS 7 and SQL 2008 betas in a hosted environment; partnering in the Go Live Program for Hyper-V; and product co-launches built on WS 2008 with Hyper-V technology.
Dynamic PDF
ceTE software specializes in components for dynamic PDF generation and manipulation. The DynamicPDF™ product line allows you to dynamically generate PDF documents, merge PDF documents and new content to existing PDF documents from within your applications.
Discover the Top 5 .NET Memory Management Fundamentals
To write the best .NET code, you need to know exactly how the .NET framework really manages memory. Ricky Leeks presents the Top 5 fundamental facts of .NET memory management. Learn more.
Nevron Chart for .NET 2010.1 Now Available
The leading .NET charting control now features PDF, Flash and Silverlight export, visualization of large datasets and more. Deliver true charting functionality to your BI, Scorecard, Presentation or Scientific apps. Download evaluation now.
ASP.NET 4 Hosting
Get 2 Months Free of ASP.NET Hosting for Only $4.95/month! Receive FREE MS SQL and MySQL Databases Including ASP.NET 4/3.5, MVC 3.0, Silverlight 4, Windows 2008/IIS 7.0 Plus FREE IIS 7 Modules. Host UNLIMITED ASP.NET Web Sites – Click Here!
 
 Post a Feedback, Comment, or Question about this article
Subject:
Comment:
Nevron Chart
Become a Sponsor
 Comments
SelectedIndexChanged Event? by Jakob On March 5, 2009
Hello Purushottam Very nice guide. I have one problem with my Tabcontrol in WPF, and maybe you can help! In windows form i had the "Selectedindexchanged" event on tabcontrol. with this event , it was possible for me to reload the content on the tab, everytime the users changes tab. I just checked which tab was selected and fired the function to reload the content (combobox value etc.) but with WPF, this event is gone! and i cannot figure out which one to use, or another way to do it. Do you have any ideas? Best regards Jakob
Reply | Email | Modify 
Re: SelectedIndexChanged Event? by jredfield On April 9, 2009
Sorry I'm late with this, but try in the code behind:

DependencyPropertyDescriptor selectedIndexChange = DependencyPropertyDescriptor.FromProperty (TabControl.SelectedIndexProperty, typeof(TabControl));

selectedIndexChange.AddValueChanged(MyTabControl, this.MyTabControl_SelectedIndexChanged);


Hope this helps,

John

Reply | Email | Modify 
Re: Re: SelectedIndexChanged Event? by jredfield On April 9, 2009
And the handler looks like this:

private void MyTabControl_SelectedIndexChanged(object sender, EventArgs e)
{
   ...
}
Reply | Email | Modify 
Re: Re: Re: SelectedIndexChanged Event? by Jakob On April 16, 2009
of cause dependency properties!
i was actually reading about those today.

Thanks alot! you have saved my day.

- Jakob

Reply | Email | Modify 
Tab control by Sophia On May 7, 2009
How can i make the header of a tab be vertical?

Thanks again.
Reply | Email | Modify 
Re: Tab control by Purushottam On May 14, 2009

Hi

Use the TabStripPlacement="Left" in the TabControl like as follows:

<TabControl Name="Tabs1" TabStripPlacement="Left" >

Reply | Email | Modify 
can not use tabkey to go from tab to tab by ass On November 20, 2009
how can when I press the tab key ficus does not go from tab to tab
If you tell me what I need to so it work likt that in you code I would appreciate it
Email me at steve_44@inbox.com
Reply | Email | Modify 
thanks by imran On September 7, 2010
thanks
Reply | Email | Modify 
Nice Article by Syed On October 12, 2010
Hi Rathore,

very cool Article.Good Work....
Reply | Email | Modify 
Thanks you for this article by inder On December 27, 2010
I wanted to thank you for this article as it help me lot to understand tab control, and i also wanted to know how to format the controls on different tab in designing, any help will be appreciated thank you
Reply | Email | Modify 

 © 2012  contents copyright of their authors. Rest everything copyright Mindcracker. All rights reserved.