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: