Categories: WPF 教程

WPF教程之 WebBrowser控件

杂项控件:

WebBrowser控件

WPF有一个随时可用的WebBrowser控件,允许您在应用程序中托管完整的Web浏览器。 WebBrowser控件实际上只是一个围绕ActiveX版本的Internet Explorer的shell,但由于这是Windows集成的,因此您的应用程序应该可以在所有Windows机器上运行,而无需安装其他组件。

我在本文中做了一些不同的事情:我没有从一个有限的例子开始然后完善,我只创建了一个复杂的例子。 它说明了如何轻松地启动和运行小型Web浏览器。 它的功能非常基础,但如果您愿意,可以轻松扩展它。 以下是它的外观:

那么让我们来看看代码:

<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);
  }

 }
}

一开始看起来代码又多又乱,但是如果仔细看看,你会发现其中有很多重复。

让我们从XAML部分开始谈论吧。 请注意,我正在使用本教程中其他地方讨论的几个概念,包括ToolBar控件和WPF命令。 ToolBar有一对按钮用于后退前进。 还有一个用于输入和显示当前URL的地址栏,以及一个用于导航到输入的URL的按钮。

在工具栏下方,是实际的WebBrowser控件。 正如您所看到的,使用它只需要一行XAML – 在这种情况下,我们订阅了Navigating事件,该事件在WebBrowser开始导航到URL时发生。

后台代码中,我们首先导航到在Window构造函数中的URL,以便立即显示某些内容而不是空白。 然后我们有txtUrl_KeyUp事件,我们在其中检查用户是否在地址栏内按了Enter键 – 如果是,我们开始导航到输入的URL。

wbSample_Navigating事件确保每次新导航开始时地址栏都会更新。 这很重要,因为我们希望它显示当前的URL,无论用户是通过输入新的URL还是通过单击网页上的链接。

后台代码的最后一部分是对命令的简单处理:两个用于后退和前进的按钮,我们使用CanGoBack和CanGoForward来决定它们是否可以执行,以及GoBack和GoForward方法来完成实际工作。 这在处理WPF命令时非常标准,如本教程的命令部分所述。

对于最后一个命令,我们允许它始终执行,当它执行时,我们再次使用Navigate()方法。

小结

如您所见,使用WebBrowser控件可以非常轻松地在应用程序内部托管和使用完整的Web浏览器。 但是,您需要知道,与WinForms版本相比,WebBrowser的WPF版本有点受限,但基本用法和导航可以正常工作。

如果您希望使用WinForms版本,可以使用WindowsFormsHost来做,本教程的其他部分对此进行了解释。

admin

这个人很懒,什么都没有留下~

Share
Published by
admin

Recent Posts

聊聊vue3中的defineProps

在Vue 3中,defineP…

7 天 ago

在 Chrome 中删除、允许和管理 Cookie

您可以选择删除现有 Cooki…

2 周 ago

自定义指令:聊聊vue中的自定义指令应用法则

今天我们来聊聊vue中的自定义…

3 周 ago

聊聊Vue中@click.stop和@click.prevent

一起来学下聊聊Vue中@cli…

4 周 ago

Nginx 基本操作:启动、停止、重启命令。

我们来学习Nginx基础操作:…

4 周 ago

Vue3:手动清理keep-alive组件缓存的方法

Vue3中手动清理keep-a…

1 月 ago