This article is currently in the process of being translated into Portuguese (~99% done).
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.