2009-05-29 6 views
18

J'ai travaillé sur une application WPF pendant un certain temps et le moment est venu de joindre le document d'aide au format CHM.Utilisation de l'aide F1 (format CHM) Avec WPF

Mais hélas! HelpProvider, la façon standard d'afficher les fichiers CHM dans Winforms, a disparu comme par magie et n'a pas d'équivalent dans WPF. J'ai essayé d'utiliser WindowsFormsHost pour engendrer un nouveau contrôle afin que je puisse réellement afficher l'aide, mais essentiellement il saisit juste le contrôle de l'ensemble de l'interface utilisateur.

Un peu plus de détails: J'ai un élément de menu que je veux, lorsque l'on clique dessus, ouvrir le fichier CHM.

D'abord, je mis le WindowsFormsHost ...

host = new System.Windows.Forms.Integration.WindowsFormsHost(); 
helpForm = new System.Windows.Forms.Control(); 
host.Child = helpForm; 
host.Visibility = System.Windows.Visibility.Hidden; 
this.grid1.Children.Add(host); 

hp = new System.Windows.Forms.HelpProvider(); 
hp.HelpNamespace = "Somehelpfile.chm"; 
hp.SetHelpNavigator(helpForm, System.Windows.Forms.HelpNavigator.TableOfContents); 

Et puis-je dire, le tour est joué, vous récoltez.

private void Help_Click(object sender, RoutedEventArgs e) 
{ 
    host.Visibility = Visibility.Visible; 
    helpForm.Show(); 
    hp.SetShowHelp(helpForm, true); 
} 

Je ne suis pas vraiment sûr d'où procéder à partir d'ici. Quand je montre le helpForm, il obscurcit/remplace l'interface utilisateur existante et tout ce que je reçois est une fenêtre WPF grise, vide, sans fichier d'aide.

Tout preneur?

Répondre

25

Appelez-moi fou, mais ne pouvait pas vous faire juste:

System.Diagnostics.Process.Start(@"C:\path-to-chm-file.chm"); 
+18

Je suppose que le sujet est pour l'aide F1 - c'est-à-dire sensible au contexte - mais votre solution ouvre juste le fichier d'aide – gbjbaanb

+1

Un autre downvote aléatoire. Pour quelle raison les gars? –

+2

@ ScottAnderson Je pense que gbjbaanb a donné une bonne raison pour expliquer pourquoi le downvote n'était pas "aléatoire". – Michael

0

Que diriez-vous d'utiliser la classe Help au lieu d'ouvrir le fichier externe

+3

Parce que c'est seulement pour winforms et disparu dans wpf, comme déjà mentionné dans la question -> -1 – SpeziFish

+0

Donc, corrigez-moi si je me trompe, mais vous êtes capable d'utiliser n'importe quel composant WinForm à partir du code WPF. –

26

Si vous incluez System.Windows.Forms.dll vous peut aussi faire:

System.Windows.Forms.Help.ShowHelp(null, @"help.chm"); 

en outre, il y a un article here sur l'ajout d'un système d'aide contextuelle à WPF.

+0

Je cherchais un moyen d'ouvrir un fichier d'aide dans WPF, pas besoin de sensibilité au contexte. Cela résout précisément mon problème. – ford

+2

@Cameron, vous pouvez également appeler l'aide pour ouvrir sur un contexte avec cette méthode, par exemple: \t \t \t \t 0. System.Windows.Forms.Help.ShowHelp (null, "myHelp.chm", System.Windows.Forms.HelpNavigator .KeywordIndex, "MyKeyword"); –

+0

Où dois-je ajouter cette ligne: System.Windows.Forms.Help.ShowHelp (null, @ "help.chm"); –

8

J'essaye Easy Help with WPF, qui adresse également l'aide contextuelle basée sur les mots-clés. Jusqu'à présent, cela semble bien. Tout ce que je dois faire est de craquer et d'écrire de l'aide décente!

Questions connexes