TOC

This article is currently in the process of being translated into Portuguese (~99% done).

Controles diversos:

The WebBrowser control

O WPF vem com um controle WebBrowser pronto para usar, que permite que você hospede um navegador da Web completo em seu aplicativo. O controle WebBrowser é realmente apenas um shell em torno de uma versão ActiveX do Internet Explorer, mas como essa é uma parte integrada do Windows, seu aplicativo deve funcionar em todas as máquinas Windows sem exigir a instalação de componentes adicionais.

Eu fiz as coisas um pouco diferente neste artigo: em vez de começar com um exemplo muito limitado e, em seguida, adicionando a ele, criei apenas um exemplo, mas mais complexo. Ele ilustra como é fácil instalar e executar um pequeno navegador da web. É muito básico em sua funcionalidade, mas você pode facilmente estendê-lo se quiser. Veja como fica:

Então vamos dar uma olhada no código:

<Window x:Class="WpfTutorialSamples.Misc_controls.WebBrowserControlSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="WebBrowserControlSample" Height="300" Width="450">
    <Window.CommandBindings>
        <CommandBinding Command="NavigationCommands.BrowseBack" CanExecute="BrowseBack_CanExecute" Executed="BrowseBack_Executed" />
        <CommandBinding Command="NavigationCommands.BrowseForward" CanExecute="BrowseForward_CanExecute" Executed="BrowseForward_Executed" />
        <CommandBinding Command="NavigationCommands.GoToPage" CanExecute="GoToPage_CanExecute" Executed="GoToPage_Executed" />
    </Window.CommandBindings>
    <DockPanel>
        <ToolBar DockPanel.Dock="Top">
            <Button Command="NavigationCommands.BrowseBack">
                <Image Source="/WpfTutorialSamples;component/Images/arrow_left.png" Width="16" Height="16" />
            </Button>
            <Button Command="NavigationCommands.BrowseForward">
                <Image Source="/WpfTutorialSamples;component/Images/arrow_right.png" Width="16" Height="16" />
            </Button>
            <Separator />
            <TextBox Name="txtUrl" Width="300" KeyUp="txtUrl_KeyUp" />
            <Button Command="NavigationCommands.GoToPage">
                <Image Source="/WpfTutorialSamples;component/Images/world_go.png" Width="16" Height="16" />
            </Button>
        </ToolBar>
        <WebBrowser Name="wbSample" Navigating="wbSample_Navigating"></WebBrowser>
    </DockPanel>
</Window>
using System;
using System.Windows;
using System.Windows.Input;

namespace WpfTutorialSamples.Misc_controls
{
	public partial class WebBrowserControlSample : Window
	{
		public WebBrowserControlSample()
		{
			InitializeComponent();
			wbSample.Navigate("http://www.wpf-tutorial.com");
		}

		private void txtUrl_KeyUp(object sender, KeyEventArgs e)
		{
			if(e.Key == Key.Enter)
				wbSample.Navigate(txtUrl.Text);
		}

		private void wbSample_Navigating(object sender, System.Windows.Navigation.NavigatingCancelEventArgs e)
		{
			txtUrl.Text = e.Uri.OriginalString;
		}

		private void BrowseBack_CanExecute(object sender, CanExecuteRoutedEventArgs e)
		{
			e.CanExecute = ((wbSample != null) && (wbSample.CanGoBack));
		}

		private void BrowseBack_Executed(object sender, ExecutedRoutedEventArgs e)
		{
			wbSample.GoBack();
		}

		private void BrowseForward_CanExecute(object sender, CanExecuteRoutedEventArgs e)
		{
			e.CanExecute = ((wbSample != null) && (wbSample.CanGoForward));
		}

		private void BrowseForward_Executed(object sender, ExecutedRoutedEventArgs e)
		{
			wbSample.GoForward();
		}

		private void GoToPage_CanExecute(object sender, CanExecuteRoutedEventArgs e)
		{
			e.CanExecute = true;
		}

		private void GoToPage_Executed(object sender, ExecutedRoutedEventArgs e)
		{
			wbSample.Navigate(txtUrl.Text);
		}

	}
}

O código pode parecer um pouco esmagador no começo, mas se você der uma segunda olhada, perceberá que há muita repetição nele.

Vamos começar falando sobre a parte XAML . Observe que estou usando vários conceitos discutidos em outro lugar neste tutorial, incluindo o controle ToolBar e os comandos do WPF. A barra de ferramentas é usada para hospedar alguns botões para retroceder e avançar. Depois disso, temos uma barra de endereço para inserir e exibir o URL atual, juntamente com um botão para navegar até o URL inserido.

Abaixo da barra de ferramentas, temos o controle real do WebBrowser. Como você pode ver, usá-lo requer apenas uma única linha de XAML - nesse caso, assinamos o evento Navigating , que ocorre assim que o WebBrowser começa a navegar para um URL.

Em Code-behind , começamos navegando para uma URL já no construtor da Window, para ter algo para mostrar imediatamente em vez de um controle em branco. Em seguida, temos o evento txtUrl_KeyUp , no qual verificamos se o usuário pressionou Enter na barra de endereço. Nesse caso, começamos a navegar para o URL inserido.

O evento wbSample_Navigating garante que a barra de endereço seja atualizada toda vez que uma nova navegação for iniciada. Isso é importante porque queremos mostrar o URL atual, independentemente de o usuário ter iniciado a navegação inserindo um novo URL ou clicando em um link na página da Web.

A última parte do Code-behind é o simples manuseio de nossos comandos: dois para os botões voltar e avançar, onde usamos CanGoBack e CanGoForward para decidir se eles podem ser executados, e os métodos GoBack e GoForward para fazer o trabalho real. Isso é muito padrão ao lidar com comandos do WPF, conforme descrito na seção de comandos deste tutorial.

Para o último comando, nós permitimos que ele sempre execute e quando isso acontecer, usamos o método Navigate () novamente.

Resumo

Como você pode ver, hospedar e usar um navegador completo dentro do seu aplicativo torna-se muito fácil com o controle WebBrowser. No entanto, você deve estar ciente de que a versão do WPF do WebBrowser é um pouco limitada quando comparada à versão do WinForms, mas para uso básico e navegação, ela funciona bem.

Se você deseja usar a versão do WinForms, você pode fazê-lo usando o WindowsFormsHost, que é explicado em outra parte deste tutorial.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!