WPF - Criando gráficos com o WPF toolkit
Com a liberação do WPF Toolkit em junho de 2009 é possível criar diversos gráficos em aplicações Windows Presentantion Foundation - WPF. Neste artigo eu mostro como usar o recurso de visualização de dados através do assembly System.Windows.Controls.DataVisualization.Toolkit.dll.
Antes de iniciar você tem que fazer o download do WPF Toolkit - June 2009 Release e efetuar a instalação na sua máquina.
Nos exemplos usados neste artigo eu estou usando os seguintes recursos:
Obs: Para mais detalhes
sobre o pacote de idiomas do VB 2008 Express visite o site em :
http://www.microsoft.com/downloads/details.aspx?FamilyId=BF3CB4CB-4C4D-43BF-90AB-652BFA9EEC5B&displaylang=pt-br
Criando o projeto WPF e preparando o ambiente
Abra o VB 2008 Express e crie um novo projeto do tipo WPF Application com o nome WPF_Graficos;
Antes de poder usar qualquer funcionalidade para gerar gráficos na sua aplicação WPF você tem que incluir uma referência ao assembly System.Windows.Controls.DataVisualization.Toolkit.dll.
Para isso clique com o botão direito do mouse sobre o nome do projeto e selecione Add Reference (ou através do menu Project clique em Add Reference);
Selecione a guia Procurar(Browse) e e escolha a o item System.Windows.Controls.DataVisualization.Toolkit.dll na pasta onde o toolkit foi instalado,geralmente em X:\Arquivos de programas\WPF Toolkit\v3.5.40619.1 , e clique no botão OK;
Agora o próximo passo é importar os namespaces:
System.Windows.Controls.DataVisualization.toolkit e System.Windows.Controls.DataVisualization.Charting
para página do projeto WPF incluindo as seguintes linhas no arquivo window1.xaml:
.... xmlns:DV="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:DVC="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" ..... |
Obs: Basta você digitar xmlns= para ver o recurso IntelliSence exibir os recursos citados.
Após isso se você digitar a tag <DVC: irá ver a relação dos gráficos disponíveis para uso;
Criando Gráficos no WPF com o WPF-Toolkit
O elemento que representa um controle gráfico no arquivo XAML é o elemento Chart:
O atributo Series do elemento Chart é usado para criar o tipo do gráfico e dentre os tipos mais usados temos: BarSeries, ColumnSeries, LineSeries, PieSeries e ScatterSeries;
Criando um gráfico de barras
Vamos criar um gráfico de barras definindo o seguinte código no arquivo XAML:
<Window
x:Class="Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:DV="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:DVC="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" Title="Brasileirão" Height="300" Width="450"> <Grid> <DVC:Chart Canvas.Top="80" Canvas.Left="10" Name="mcChart" Width="400" Height="250" Background="LightSteelBlue"> <DVC:Chart.Series> <DVC:BarSeries Title="Pontos" IndependentValueBinding="{Binding Path=Key}" DependentValueBinding="{Binding Path=Value}"> </DVC:BarSeries> </DVC:Chart.Series> </DVC:Chart> </Grid> </Window> |
Agora devemos abrir o arquivo code-behind Window1.xaml.vb e primeiro declarar o seguinte namespace:
Imports System.Windows.Controls.DataVisualization.Charting
OBS: Em todos os exemplos mostrados devemos repetir este procedimento.
Depois podemos definir o seguinte código para ilustrar a criação de um gráfico de barras:
Imports System.Windows.Controls.DataVisualization.Charting Class Window1 Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded LoadBarChartData() End Sub Private Sub LoadBarChartData() DirectCast(mcChart.Series(0), BarSeries).ItemsSource = _ New KeyValuePair(Of String, Integer)() {New KeyValuePair(Of String, Integer)("Flamento", 67), _ New KeyValuePair(Of String, Integer)("Internacional", 65), _ New KeyValuePair(Of String, Integer)("São Paulo", 65), _ New KeyValuePair(Of String, Integer)("Cruzeiro", 62), _ New KeyValuePair(Of String, Integer)("Palmeiras", 62), _ New KeyValuePair(Of String, Integer)("Avai", 57)} End Sub End Class |
O código acima cria uma coleção usando a estrutura KeyValuePair(Of <(TKey, TValue>)>) - Define um par chave/valor que pode ser definido ou recuperado e define a propriedade ItemSource da série BarSeries do gráfico de barra definido.
A propriedade ItemSource obtém ou define uma coleção usada para gerar o conteúdo do controle. Neste exemplo estou usando a propriedade para acrescentar itens ao controle.
Em todos os exemplos irei usar esta mesma estrutura alterando somente o atributo Series conforme o tipo de gráfico.
Executando projeto iremos obter:
Criando um gráfico de Colunas
Para criar um gráfico de colunas vamos usar os mesmos dados e os mesmos procedimentos anteriores.
Inclua um novo formulário através do menu Project -> Add Window; Será incluído um novo formulário window2.xaml;
Defina no arquivo XAML o seguinte código:
<Window x:Class="Window2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:DV="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:DVC="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" Title="Brasileirão" Height="300" Width="450"> <Grid> <DVC:Chart Canvas.Top="80" Canvas.Left="10" Name="mcChart" Width="400" Height="250" Background="LemonChiffon"> <DVC:Chart.Series> <DVC:ColumnSeries Title="Pontos" IndependentValueBinding="{Binding Path=Key}" DependentValueBinding="{Binding Path=Value}"> </DVC:BarSeries> </DVC:Chart.Series> </DVC:Chart> </Grid> </Window> |
Abra o arquivo code-behind Window2.xaml.vb declarar o namespace Imports System.Windows.Controls.DataVisualization.Charting e defina o seguinte código:
Private Sub LoadColumnChartDados() DirectCast(mcChart.Series(0), ColumnSeries).ItemsSource = _ New KeyValuePair(Of String, Integer)() {New KeyValuePair(Of String, Integer)("Flamento", 67), _ New KeyValuePair(Of String, Integer)("Internacional", 65), _ New KeyValuePair(Of String, Integer)("São Paulo", 65), _ New KeyValuePair(Of String, Integer)("Cruzeiros", 62), _ New KeyValuePair(Of String, Integer)("Palmeiras", 62), _ New KeyValuePair(Of String, Integer)("Avai", 57)} End Sub End |
Para exibir o gráfico clique em MyProject, selecione a aba Aplicativo e em URI de inicialização defina o formulário window2.xaml;
Após esta configuração , executando o projeto iremos obter:
Criando um gráfico de Pizza
Vamos continuar usando os mesmos dados para criar um gráfico de Pizza.
Inclua um novo formulário através do menu Project -> Add Window; Será incluído um novo formulário window3.xaml;
Defina no arquivo XAML o seguinte código:
<Window x:Class="Window3" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:DV="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:DVC="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" Title="Brasileirão" Height="300" Width="450"> <Grid> <DVC:Chart Canvas.Top="80" Canvas.Left="10" Name="mcChart" Width="400" Height="250" Background="LightCoral"> <DVC:Chart.Series> <DVC:PieSeries Title="Pontos" IndependentValueBinding="{Binding Path=Key}" DependentValueBinding="{Binding Path=Value}"> </DVC:PieSeries > </DVC:Chart.Series> </DVC:Chart> </Grid> </Window> |
Abra o arquivo code-behind Window3.xaml.vb declarar o namespace Imports System.Windows.Controls.DataVisualization.Charting e definir o seguinte código:
Private Sub LoadColumnChartDados() DirectCast(mcChart.Series(0), PieSeries).ItemsSource = _ New KeyValuePair(Of String, Integer)() {New KeyValuePair(Of String, Integer)("Flamento", 67), _ New KeyValuePair(Of String, Integer)("Internacional", 65), _ New KeyValuePair(Of String, Integer)("São Paulo", 65), _ New KeyValuePair(Of String, Integer)("Cruzeiros", 62), _ New KeyValuePair(Of String, Integer)("Palmeiras", 62), _ New KeyValuePair(Of String, Integer)("Avai", 57)} End Sub End |
Para exibir o gráfico clique em MyProject, selecione a aba Aplicativo e em URI de inicialização defina o formulário window3.xaml;
Após esta configuração , executando o projeto iremos obter:
Criando um gráfico de Linha
Vamos continuar usando os mesmos dados para criar um gráfico de Linha:
Inclua um novo formulário através do menu Project -> Add Window; Será incluído um novo formulário window4.xaml;
Defina no arquivo XAML o seguinte código:
<Window x:Class="Window4" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:DV="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:DVC="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" Title="Brasileirão" Height="300" Width="450"> <Grid> <DVC:Chart Canvas.Top="80" Canvas.Left="10" Name="mcChart" Width="400" Height="250" Background="MediumTurquoise"> <DVC:Chart.Series> <DVC:LineSeries Title="Pontos" IndependentValueBinding="{Binding Path=Key}" DependentValueBinding="{Binding Path=Value}"> </DVC:PieSeries > </DVC:Chart.Series> </DVC:Chart> </Grid> </Window> |
Abra o arquivo code-behind Window4.xaml.vb declarar o namespace Imports System.Windows.Controls.DataVisualization.Charting e definir o seguinte código:
Private Sub LoadColumnChartDados() DirectCast(mcChart.Series(0), LineSeries).ItemsSource = _ New KeyValuePair(Of String, Integer)() {New KeyValuePair(Of String, Integer)("Flamento", 67), _ New KeyValuePair(Of String, Integer)("Internacional", 65), _ New KeyValuePair(Of String, Integer)("São Paulo", 65), _ New KeyValuePair(Of String, Integer)("Cruzeiros", 62), _ New KeyValuePair(Of String, Integer)("Palmeiras", 62), _ New KeyValuePair(Of String, Integer)("Avai", 57)} End Sub End |
Para exibir o gráfico clique em MyProject, selecione a aba Aplicativo e em URI de inicialização defina o formulário window4.xaml;
Após esta configuração , executando o projeto iremos obter:
Criando um gráfico de Área
Vamos continuar usando os mesmos dados para criar um gráfico de Linha
Inclua um novo formulário através do menu Project -> Add Window; Será incluído um novo formulário window5.xaml;
Defina no arquivo XAML o seguinte código:
<Window x:Class="Window5" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:DV="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit" xmlns:DVC="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit" Title="Brasileirão" Height="300" Width="450"> <Grid> <DVC:Chart Canvas.Top="80" Canvas.Left="10" Name="mcChart" Width="400" Height="250" Background="LawnGreen"> <DVC:Chart.Series> <DVC:AreaSeries Title="Pontos" IndependentValueBinding="{Binding Path=Key}" DependentValueBinding="{Binding Path=Value}"> </DVC:AreaSeries > </DVC:Chart.Series> </DVC:Chart> </Grid> </Window> |
Abra o arquivo code-behind Window5.xaml.vb declarar o namespace Imports System.Windows.Controls.DataVisualization.Charting e definir o seguinte código:
Private Sub LoadColumnChartDados() DirectCast(mcChart.Series(0), AreaSeries).ItemsSource = _ New KeyValuePair(Of String, Integer)() {New KeyValuePair(Of String, Integer)("Flamento", 67), _ New KeyValuePair(Of String, Integer)("Internacional", 65), _ New KeyValuePair(Of String, Integer)("São Paulo", 65), _ New KeyValuePair(Of String, Integer)("Cruzeiros", 62), _ New KeyValuePair(Of String, Integer)("Palmeiras", 62), _ New KeyValuePair(Of String, Integer)("Avai", 57)} End Sub End |
Para exibir o gráfico clique em MyProject, selecione a aba Aplicativo e em URI de inicialização defina o formulário window5.xaml;
Após esta configuração , executando o projeto iremos obter:
Existem outros recursos que
podemos explorar e que eu pretendo abordar em outro artigo.
Apenas para citar, um deles é a propriedade Axes
do Item Chart que é usada para incluir eixos X e Y
a um gráfico. Abaixo temos um exemplo onde incluímos um eixo
linear a um gráfico :
<DVC:Chart.Axes>
<!-- Inclui eixos Horizontal e Vertical-->
<DVC:LinearAxis Orientation="Y" Title="New
Hires" Interval="40" Foreground="Black"
Background="GreenYellow"
FontFamily="Georgia" FontSize="14"
FontWeight="Bold" />
</DVC:Chart.Axes>
Aguarde em breve mais artigos sobre aplicações gráficas com WPF.
Pegue o projeto completo aqui: WPF_Graficos.zip
Eu sei é apenas WPF, mas eu gosto...
Referências:
José Carlos Macoratti