TOC

This article has been localized into French by the community.

Contrôles divers:

Le contrôle WindowsFormsHost

WPF et Winforms sont deux frameworks d'Interface Utilisateur (UI frameworks) distincts, crés par Microsoft. WPF est une alternative plus moderne que Winforms qui était le premier UI framework .NET. Pour facilité la transition entre les deux, Microsoft c'est assuré que les contrôles Winforms pourraient toujours être utilisé dans les applications WPF. Ce qui est rendu possible grâce au contrôle WindowsFormsHost, qui fait l'objet de cet article.

Pour utiliser le WindowsFormsHost et les contrôles Winforms, vous devez référencer les "assemblies" suivant :

  • WindowsFormsIntegration
  • System.Windows.Forms

Dans Visual Studio, faire un clic droit sur l'entrée "Références" du projet puis clic sur "Ajouter une référence"

Dans la boite de dialogue affichée, selectionnez "Assemblys puis cocher les deux assembies requis :

Utilisation du contrôle WinForms WebBrowser

dans l'article précédent, nous avons utilisé le contrôle WPF WebBrowser pour créer un navigateur web léger. Mais à l’écriture de cet article, le contrôle WPF WebBrowser est un peu limité comparativement à sa version Winforms. Il existe beaucoup d'exemple de chose facile à faire avec la version Winforms et qui serrais plus difficile voir impossible à faire avec la version WPF.

Un exemple tout bête est la propriété DocumentTitleet l’événement correspondant DocumentTitleChanged qui rend simple le choix d'avoir une correspondance entre le titre de la fenêtre et le titre de la page web courante. Nous utiliserons ce prétexte pour testé maintenant la version Winforms dans notre application WPF

<Window x:Class="WpfTutorialSamples.Misc_controls.WindowsFormsHostSample"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"
        Title="WindowsFormsHostSample" Height="350" Width="450">
    <Grid>
        <WindowsFormsHost Name="wfhSample">
            <WindowsFormsHost.Child>
                <wf:WebBrowser DocumentTitleChanged="wbWinForms_DocumentTitleChanged" />
            </WindowsFormsHost.Child>
        </WindowsFormsHost>
    </Grid>
</Window>
using System;
using System.Windows;

namespace WpfTutorialSamples.Misc_controls
{
	public partial class WindowsFormsHostSample : Window
	{
		public WindowsFormsHostSample()
		{
			InitializeComponent();
			(wfhSample.Child as System.Windows.Forms.WebBrowser).Navigate("http://www.wpf-tutorial.com");
		}

		private void wbWinForms_DocumentTitleChanged(object sender, EventArgs e)
		{
			this.Title = (sender as System.Windows.Forms.WebBrowser).DocumentTitle;
		}
	}
}

Ayez une attention particulière à la ligne ou le namespace WinForms est ajouté à la fenêtre pour pouvoir y référencer les contrôles :

xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"

Ceci nous permet de référencer les contrôles WinForms avec le prfixe wf:

Comme vous pouvez le voir, le contrôle WindowsFormsHost est plutôt simple à utiliser. Il contient la propriété Child où vous pouvez ajouter un seule contrôle Winforms, un peu comme les fenêtre WPF qui n'autorise qu'un seul contrôle racine. Si vous souhaitez utiliser plusieur contrôles WinForms dans votre WindowsFormsHost vous pouvez utiliser un contrôle WinForm Panel ou tout autre contrôles de type conteneurs.

Le contrôle WinForms WebBrowser est utilisé en référençant l'assembly System.Windows.Forms et en utilisant le préfixe wf:, comme expliqué précédement.

Dans le Code-behind, Pour avoir une page réelle, plutôt qu'un contrôle vide au démarrage, nous l'initialisation par un appel à Navigate. Nous nous abonnons ensuite à l'événement DocumentTitleChanged dans lequel nous modifions la propriété Title de la fenêtre avec la valeur de de la propriété DocumentTitle du contrôle WebBrowser.

Félicitation, vous avez maintenant une application WPF encapsulant un contrôle WinForms WebBrowser.

Résumé

Comme vous pouvez le voir, utiliser des contrôles WinForms dans une application WPF est plutôt simple, mais la question est plutôt : Est-ce une bonne idée ?

En générale, vous devriez l'éviter. Il existe plusieurs problèmes qui pourraient ou non affecter votre application (beaucoup son décrit dal'article MSDN : http://msdn.microsoft.com/en-us/library/aa970911%28v=VS.100%29.aspx), mais le plus gros soucis est que le mélange de Framework d'Interface Utilisateur ne serra peut-être plus supporté dasn les future version du framework .NET.

Au final c'est à vous de choisir - avez vous vraiment besoin du Contrôle WinForms et n'existe-t-il pas un alternative WPF qui ferrait aussi bien l'affaire ?

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!