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

phy*_*ler 20 c# chm wpf interop winforms

我已经在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);
Run Code Online (Sandbox Code Playgroud)

然后我说,瞧,揭示自己.

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

我不确定从哪里开始.当我显示helpForm时,它会模糊/覆盖现有的UI,而我得到的只是一个灰色的空WPF窗口,没有帮助文件.

任何接受者?

Cam*_*and 27

如果您包含System.Windows.Forms.dll,您还可以执行以下操作:

System.Windows.Forms.Help.ShowHelp(null, @"help.chm");
Run Code Online (Sandbox Code Playgroud)

此外,还有一篇文章在这里增加一个上下文敏感的帮助系统,WPF.

  • @Cameron,你也可以使用这个方法调用帮助打开一个上下文,例如:System.Windows.Forms.Help.ShowHelp(null,"myHelp.chm",System.Windows.Forms.HelpNavigator.KeywordIndex,"MyKeyword "); (2认同)

Sco*_*son 25

叫我疯了,但你不能这样做:

System.Diagnostics.Process.Start(@"C:\path-to-chm-file.chm");
Run Code Online (Sandbox Code Playgroud)

  • 我想主题是F1帮助 - 即上下文敏感 - 但是你的解决方案只是打开帮助文件 (19认同)
  • 另一个随机降票。伙计们有什么理由吗? (2认同)
  • @ScottAnderson我认为gbjbaanb给出了一个很好的理由,为什么downvote不是"随机的". (2认同)
  • 这种方法的问题在于,如果多次按F1,它将多次打开帮助文件,而不是聚焦第一个实例. (2认同)

Pet*_*r M 8

我正在尝试使用WPF轻松帮助,它还基于关键词解决了上下文相关的帮助.到目前为止似乎很好.我需要做的就是破解并写下一些体面的帮助!