使用F1帮助(CHM格式)与WPF

20

我已经在开发一个WPF应用程序一段时间了,现在需要将CHM格式的帮助文档添加到它上面。

但是!HelpProvider,在Winforms中显示CHM文件的标准方式,已经神秘地消失了,并且在WPF中没有相对应的工具。我一直在尝试使用WindowsFormsHost来生成一个新的控件,以便实际显示帮助文档,但它基本上只控制了整个UI。

更多细节:我有一个菜单项,我想要当用户点击时打开CHM文件。

首先,我设置了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);

然后我说,瞧,显露你自己。

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

我不太确定接下来该怎么做。当我显示helpForm时,它会遮盖/覆盖现有的UI,并且我只得到一个空的灰色WPF窗口,没有帮助文件。

有人能帮忙吗?


这个回答解决了你的问题吗?在WPF应用程序中集成帮助 - StayOnTarget
5个回答

28

如果您包含 System.Windows.Forms.dll,您也可以这样做:

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

此外,在这里还有一篇关于如何向WPF添加上下文相关帮助系统的文章


我正在寻找一种在WPF中打开帮助文件的方法,不需要上下文敏感性。这恰好解决了我的问题。 - ford
2
@Cameron,你也可以使用这种方法调用帮助来打开上下文,例如:System.Windows.Forms.Help.ShowHelp(null, "myHelp.chm", System.Windows.Forms.HelpNavigator.KeywordIndex, "MyKeyword"); - Ed Bayiates
我应该在哪里添加这行代码: System.Windows.Forms.Help.ShowHelp(null, @"help.chm"); - The King

24

不要笑话我,但你难道不能这样做吗:

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

19
我认为这个主题适用于 F1 帮助——即上下文敏感——但您的解决方案只是打开了帮助文件。 - gbjbaanb
2
@ScottAnderson 我认为 gbjbaanb 已经很好地解释了为什么这个踩票不是“随意”的。 - Michael
3
这种方法的问题在于,如果您按下多次 F1,它会打开帮助文件的多个实例,而不是聚焦于第一个实例。 - Alexandru Dicu

8

我正在尝试使用WPF简易帮助文档,该文档还可以根据关键词提供上下文相关的帮助。到目前为止,它看起来不错。我只需要开始撰写一些良好的帮助文档就行了!


3

0

使用Help类来代替外部打开文件,怎么样?


4
因为这仅适用于winforms并在wpf中消失了,就像问题中已经提到的一样--> -1 - SpeziFish
所以,如果我说错了,请纠正我,但您可以从WPF代码中使用任何WinForm组件。 - Andrei Orlov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接