WPF - Criando um menu em tempo de execução


Já publiquei diversos artigos sobre o Windows Presentation Foundation - WPF, uma grande parte sobre os recursos do DataBinding, e, hoje eu vou mostrar como criar um menu em tempo de execução em uma aplicação WPF.

Atualmente você pode criar aplicações WPF usando as seguintes ferramentas:

Eu poderia usar qualquer uma das ferramentas acima para criar o exemplo usado nesta dica mas hoje eu vou usar o SharpDevelop 4.0 para criar uma aplicação WPF e gerar um menu em tempo de execução.

Pela sua simplicidade o projeto poderá ser aberto em qualquer uma das versões citadas.

A linguagem escolhida poderia ser C# ou VB .NET tanto faz, pois o código também é bem simples, mas eu vou usar o SharpDevelop justamente para mostrar que podemos usar o recurso de converter o código para C# ou VB .NET.

Abra o SharpDevelop 4.0 e no menu File selecione New -> Solution ;

Na janela New Project , observe as opções oferecidas. Vamos selecionar a linguagem C# e o item WPF e em Templates selecionar WPF Application;

A seguir informe o nome WPF_Menu_c e clique no botão Create;

Será criado a solução, e, em uma das suas visões, selecionando a aba Projects , veremos a estrutura da solução, e, selecionando a guia Source veremos a janela Window1.xaml;

Clique sobre o arquivo Window1.xaml.cs para ver o código:

Vamos incluir a rotina criarMenu() e definir o seu código para criar um menu Arquivo com duas opções: Abrir e Sair;

		private void criarMenu()
		{
		    // cria o menu principal.
		    Menu mainMenu = new Menu();
		    contentGrid.Children.Add(mainMenu);
		    mainMenu.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch;
		    mainMenu.VerticalAlignment = System.Windows.VerticalAlignment.Top;
		
		    // Cria o menu de Arquivo
		    MenuItem fileMenuItem = new MenuItem();
		    fileMenuItem.Header = "_Arquivo";
		    mainMenu.Items.Add(fileMenuItem);
		
		    // Cria os itens do menu Arquivo: Abrir
		    MenuItem openMenuItem = new MenuItem();
		    fileMenuItem.Items.Add(openMenuItem);
		    openMenuItem.Header = "_Abrir";
		    openMenuItem.Click += openMenuItem_Click;
		    ToolTip openToolTip = new ToolTip();
		    openMenuItem.ToolTip = openToolTip;
		    openToolTip.Content ="Abrir um novo Arquivo";
		
		    //cria o item Sair
		    MenuItem exitMenuItem = new MenuItem();
		    fileMenuItem.Items.Add(exitMenuItem);
		    exitMenuItem.Header = "S_air";
		    exitMenuItem.Click += exitMenuItem_Click;
		    ToolTip exitToolTip = new ToolTip();
		    exitMenuItem.ToolTip = exitToolTip;
		    exitToolTip.Content = "Encerrar";
		}
		private void openMenuItem_Click(object sender, RoutedEventArgs e)
		{
		    MessageBox.Show("Abrir um novo arquivo");
		}
		private void exitMenuItem_Click(object sender, RoutedEventArgs e)
		{
		    MessageBox.Show("Até logo!");
		    this.Close();
		}

Neste código estamos usando as classes Menu e MenuItem que representam um menu e um item de menu, respectivamente. Um Menu é uma coleção de itens de menu com um comando associado a cada um dos itens do menu. Um item de menu pode ter itens de menu filhos chamado submenus.

Estamos definindo o texto do menu e seus itens bem como uma dica sobre a funcionalidade do menu.

Exibindo o código XAML do arquivo Window1.xaml vamos definir o nome contentGrid para o Grid usado:

Agora é só alegria... Executando o projeto iremos obter:

Realmente muito simples...

Agora vamos converter o código do projeto que foi feito na linguagem C# para a linguagem VB .NET.

Selecione o arquivo Window1.xaml.cs e no menu Project selecione Convert -> From C# to VB .NET;

Será criado um novo projeto na solução já convertido para a linguagem VB .NET conforme figura abaixo:

Simples , simples assim...

Pegue o projeto completo aqui: WPF_Menu_c.zip

Acompanhe este outro artigo que mostra como criar menus em tempo de projeto: WPF - Criando um menus em tempo de projeto

Eu sei é apenas WPF, mas eu gosto...

Referências:

José Carlos Macoratti