2009-08-19 12 views
0

J'essaie de charger et d'héberger un contrôle WPF dans une application de formulaires Windows .net 2.0. Le contrôle WPF ne doit être chargé que si .net 3.5 est installé.Chargement .net 3.5 wpf-forms dans une application .net 2.0

J'ai trouvé un lien vers Hosting WPF Content in an MFC Application et c'est à peu près ce que j'essaie de faire, mais mes connaissances en C++ ne sont pas suffisantes pour pouvoir le 'traduire' en .net.

Quoi qu'il en soit, voici un autre lien: Hosting WPF Content in a Java Application qui fait la même chose mais je ne sais pas par où écrire ce code dans .net.

+0

Je pense que je peux réellement résoudre ce problème en hébergeant wpf dans un composant activeX et en le chargeant dans .net 2.0. Plus d'informations suivront si je l'obtiens jamais fonctionnant. – CodingBarfield

+0

Après avoir créé une DLL exposée .Net com et créer un fichier .tlb avec regasm je ne peux pas référencer ce fichier à partir de Visual Studio. Je me donne un avertissement en disant 'je ne peux pas ajouter d'objet com créé en .net' donc cela ferme ma théorie. Quelqu'un a une idée de comment faire cela? – CodingBarfield

Répondre

1

J'ai utilisé le code suivant pour charger une DLL contenant un contrôle de 3,5 wpf dans un hôte de formulaire Windows .net 2.0. Le contrôle chargé contient un objet ElementHost.

Dim dllPath As String = "C:\ProjectsTest\TestSolution\ActiveXUser\bin\Debug\TestControl.dll" 
If Not File.Exists(dllPath) Then 
Return 
End If 

Dim versionInformation As String 
versionInformation = Environment.Version.Major.ToString + Environment.Version.Minor 

Dim loadedAssembly As [Assembly] = [Assembly].LoadFile(dllPath) 

Dim mytypes As Type() = loadedAssembly.GetTypes() 

Dim t As Type = mytypes(1) 
Dim obj As [Object] = Activator.CreateInstance(t) 

versionInformation = Environment.Version.Major.ToString + Environment.Version.Minor 
Me.Panel1.Controls.Add(obj) 
1

Pour héberger un contrôle WPF dans un formulaire Win32, vous devez utiliser le contrôle ElementHost. Déposez ce contrôle sur la fenêtre et définissez sa propriété Child au formulaire WPF que vous souhaitez afficher.

Pour savoir si .Net 3.5 est installé ou vous pouvez essayer de ne pas charger un ensemble qui existe seulement dans 3,5

À titre d'exemple, voici une méthode pour savoir si Net 3.5 Sp1 est installé ou non :


     private static bool IsDotNet35Sp1Installed() 
     { 
      try 
      { 
       Assembly.ReflectionOnlyLoad(
        "System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); 
      } 
      catch (FileNotFoundException) 
      { 
       return false; 
      } 
      return true; 
     } 

/Daniel

+0

Cela ne fonctionnera pas dans .Net 2.0. L'objet elementhost a été introduit dans .Net 3.0 et l'application principale doit être construite contre .Net 2.0 – CodingBarfield

+0

Ok, désolé. Je n'ai pas compris. –

1

Votre premier arrêt sur des sujets comme celui-ci devrait être WPF Migration and Interoperability. En particulier, vous y trouverez un Walkthrough: Hosting a Windows Presentation Foundation Control in Windows Forms pour vous aider à démarrer.

Veuillez noter que l'application hôte Windows Forms conçue dans cette procédure pas à pas cible effectivement .NET Framework 2.0 comme vous le souhaitez, malgré le fait que ElementHost a été introduit dans .NET Framework 3.0.

Si vous avez besoin de protéger votre application contre l'absence de ces assemblages, vous devrez introduire une couche d'indirection et ne charger que ElementHost à l'exécution après avoir détecté .NET Framework 3.5, voir ci-dessous pour des conseils sur ce dernier.


version .NET Framework et la détection service pack:

Questions connexes