WPF
- Apresentando o controle TabControl
O controle TabControl da WPF é um painel que se parece com um conjunto de pastas de arquivos com abas rotuladas onde cada aba representa um conjunto de conteúdo distinto que é exibido no painel quando uma aba for selecionada. Essas abas são implementadas como objetos do tipo TabItem.
Temos então que dois elementos principais na construção do controle:
Onde o TabControl é o contêiner de um ou mais elementos TabItem.
Vamos abrir o Visual Basic 2010 Express Edition e criar um novo projeto do tipo WPF Application com o nome Wpf_TabControl;
![]() |
Selecione o arquivo MainWindow.xaml e a partir da ToolBox arraste e solte o controle TabControl no descritor XAML;
Você verá o controle exibindo um TabItem;
A seguir clique com o botão direito do mouse sobre o controle e no menu suspenso clique em Add Tab;
![]() |
Você verá uma nova TabItem ser inserida no controle;
![]() |
Observe que na janela de código XAML temos o código gerado por esta operação;
De forma bem simples temos que um cada TabControl contém uma coleção de elementos TabItem;
<TabControl>
<TabItem Header="Tab
1">Macoratti</TabItem>
<TabItem Header="Tab
2">Miriam</TabItem>
</TabControl>
O TabItem possui dois atributos específicos :
Vou mostrar um exemplo definindo um controle TabControl com 4 elementos TabItem. Da seguinte forma:
As imagens usadas estão na raiz do projeto e foram incluídas via menu Project -> Add Existing Item;
Então vamos definir no arquivo MainWindow.xaml o seguinte leiaute:
![]() |
O código XAML gerado é o seguinte:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="398" Width="473">
<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" Height="207" Width="348">
<TabItem Header="Nome" IsSelected="True" Background="Aquamarine">
<TextBlock Height="223" Width="338" Margin="0,10,120,0">
<Bold>José Carlos Macoratti - macoratti.net</Bold>
</TextBlock>
</TabItem>
<TabItem Header="Cantora" Background="Aquamarine">
<Image Source="JanisJoplin.jpg" Height="150" Width="200"/>
</TabItem>
<TabItem Header="Cantor" Background="Aquamarine">
<Image Source="johnLenon.jpg" Height="150" Width="200"/>
</TabItem>
<TabItem Header="Contato" Background="Aquamarine">
<Grid Height="115" Width="220">
<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">
Nome:</Label>
<Label Grid.Row="1" HorizontalAlignment="Right" Margin="0,14,0,0" Width="40.097">Email:</Label>
<TextBox Name="Nome" 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="TabButton" Click="TabButton_Click" Margin="0,6">OK</Button>
</Grid>
</TabItem>
</TabControl>
</Border>
</StackPanel>
</ScrollViewer>
</Window>
|
Executando o projeto e selecionando cada uma das abas iremos obter:
![]() |
![]() |
![]() |
Podemos também facilmente alterar a disposição da exibição das abas usando a propriedade TabStripPlacement. Onde os valores possíveis são: Left, Top, Right , Bottom;
Abaixo vemos um exemplo:
![]() |
![]() |
TabStripPlacement = Bottom |
TabStripPlacement = Right |
O componente TabControl e os TabItem possuem diversos eventos.
A seguir temos um exemplo de utilização do evento SelectionChanged onde estamos exibindo o nome da aba selecionada:
Private Sub Tabs1_SelectionChanged(ByVal sender As System.Object, ByVal e As System.Windows.Controls.SelectionChangedEventArgs) Handles Tabs1.SelectionChanged
Dim ti As TabItem
ti = Tabs1.SelectedItem
MessageBox.Show("Esta é a aba => " + ti.Header)
End Sub
|
O código acima foi definido no arquivo code-behind MainWindow.xaml.vb.
Abaixo vemos o resultado exibido após selecionar uma aba:
![]() |
Podemos também preencher um controle TabControl dinamicamente via código. Vamos ver como fazer isso...
Primeiro defina no código XAML o controle TabControl:
![]() |
A seguir no arquivo code-behind MainWindow.xaml.vb definia o seguinte código:
| Class MainWindow Sub New() ' This call is required by the designer. InitializeComponent() Dim ti1 As New TabItem ti1.Header = "Aba 1" ti1.Content = "Esta é o texto da Aba 1" controleTab.Items.Add(ti1) Dim ti2 As New TabItem ti2.Header = "Aba 2" ti2.Content = "Esta é o texto da Aba 2" controleTab.Items.Add(ti2) Dim ti3 As New TabItem ti3.Header = "Aba 3" ti3.Content = "Esta é o texto da Aba 3" controleTab.Items.Add(ti3) End Sub End Class |
|
Ao lado vemos as abas que foram criadas e o conteúdo de cada uma ser exibido conforme a seleção do usuário.
Os nomes das abas foram definidos via propriedade Header e o conteúdo através da propriedade Content.
Podemos também incluir imagens nos elementos TabItem conforme o exemplo abaixo:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="398" Width="473">
<Grid Height="298" Width="430">
<TabControl Margin="0,0,0,12">
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<Image Height="18" Source="queijo.gif" />
<TextBlock Text="Queijo" Margin="2,0,0,0" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<Image Height="18" Source="sorvete.gif" />
<TextBlock Text="Sorvete" Margin="2,0,0,0" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<Image Height="18" Source="pudim.gif" />
<TextBlock Text="Pudim" Margin="2,0,0,0" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
</TabItem>
</TabControl>
</Grid>
</Window>
|
![]() |
Podemos usar as diversas propriedades e eventos para configurarmos o controle TabControl e os TabItems de diversas formas possíveis. Fique a vontade para fazer isso conforme o seu interesse no controle.
Pegue o projeto completo aqui:
Wpf_TabControl.zip
Gálatas 4:3
Assim também nós, quando éramos meninos, estávamos reduzidos à servidão debaixo dos rudimentos do mundo;Referências: