2009-05-29 23 views
18

He estado trabajando en una aplicación WPF por un tiempo, y ha llegado el momento de adjuntarle el documento de ayuda de formato CHM.Usando F1 Help (formato CHM) Con WPF

Pero, ¡ay! HelpProvider, la forma estándar de mostrar archivos CHM en Winforms, se ha desvanecido mágicamente y no tiene contraparte en WPF. He intentado usar WindowsFormsHost para generar un nuevo control, así que puedo mostrar la ayuda, pero básicamente solo toma el control de toda la interfaz de usuario.

Un poco más de detalle: Tengo un elemento de menú que quiero, cuando se hace clic, abre el archivo CHM.

En primer lugar me juego hasta la 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); 

Y luego decir, listo, Revélate.

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

No estoy seguro de dónde proceder desde aquí. Cuando muestro helpForm, oscurece/anula la UI existente y todo lo que obtengo es una ventana WPF gris vacía, sin ningún archivo de ayuda.

¿Alguno de los interesados?

Respuesta

25

Llámame loco, pero no podía que acaba de hacer:

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

Supongo que el tema es para la ayuda F1, es decir, sensible al contexto, pero su solución solo abre el archivo de ayuda – gbjbaanb

+1

Otro voto negativo al azar. ¿Alguna razón chicos? –

+2

@ScottAnderson Creo que gbjbaanb dio una muy buena razón de por qué el voto no fue "aleatorio". – Michael

0

¿Cómo sobre el uso de la clase Help en lugar de abrir el archivo externamente

+3

Porque esto es solo para winforms y se ha desvanecido en wpf, como ya se mencionó en la pregunta -> -1 – SpeziFish

+0

Así que corrígeme si me equivoco, pero puede usar cualquier componente WinForm del código WPF. –

26

si se incluyen System.Windows.Forms.dll se también puede hacer:

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

además, hay un artículo here sobre la adición de un sistema de ayuda sensible al contexto para WPF.

+0

Estaba buscando una manera de abrir un archivo de ayuda en WPF, sin necesidad de sensibilidad contextual. Esto resuelve mi problema con precisión. – ford

+2

@Cameron, también se puede acceder a la ayuda para abrir en un contexto con este método, por ejemplo: \t \t \t \t System.Windows.Forms.Help.ShowHelp (null, "myHelp.chm", System.Windows.Forms.HelpNavigator .KeywordIndex, "MyKeyword"); –

+0

¿Dónde debería agregar esta línea: System.Windows.Forms.Help.ShowHelp (null, @ "help.chm"); –

8

Estoy probando Easy Help with WPF, que también aborda la ayuda contextual basada en palabras clave. Hasta ahora parece bueno. ¡Todo lo que necesito hacer es descifrar y escribir una ayuda decente!