【问题标题】:WPF 4.0 SpellCheck issue loading Custom DictionariesWPF 4.0 SpellCheck 问题加载自定义词典
【发布时间】:2013-01-28 05:13:24
【问题描述】:

有人在 WPF 4.0 中使用过自定义字典吗? 我在让自定义词典在我的 WPF 项目中工作时遇到问题。 我一直在尝试遵循 msdn 提供的示例,但没有取得任何进展。

http://msdn.microsoft.com/en-us/library/system.windows.controls.spellcheck.customdictionaries.aspx

glossary.Definition.SpellCheck.IsEnabled = true;
Uri uri = new Uri(@"pack://application:,,,/Prog.Proj;component/dictionary.lex");
glossary.Definition.SpellCheck.CustomDictionaries.Add(uri);

由于我的工作性质,子文件夹已重命名。

我的 .lex 文件被设置为资源文件。

编辑
只有在页面加载后在单独的按钮事件中设置它时,我才能让它工作。似乎有什么东西阻止了 CustomDictionariesSources 的“拼写”属性加载,直到回发之后?如果有人对此有所了解,请发表您的见解。

最终编辑
我想要的文本框在一个网格中,该网格有一个启用的禁用标志,该标志设置在代码的深处。下面评论的另一个链接谈到了这一点。面临的另一个问题是我的页面由部分呈现,具体取决于用户选择。为了创建一致的行为,每次加载/重新加载我的文本框时,我都会将拼写检查作为最后一步加载。

我创建了一个上下文菜单扩展,以允许用户接受建议或添加到自定义词典。然后我根据当前用户将我的自定义词典提交到注册表中。我发现这个方向非常用户友好且易于实施。要检索项目,我需要创建一个临时文件,为该文件打包 uri,然后在加载自定义字典后删除该文件。

如果这有助于您实施自定义拼写检查,或者如果您有任何疑问,请告诉我!

【问题讨论】:

  • 如果您的.lex 文件设置为嵌入式资源,为什么要使用文件路径来访问它?尝试改用pack: URI
  • 我也试过了。如果您有如何执行此操作的有效示例,请告诉我。
  • 在您的原始问题中,您链接到的文章底部有一个 Pack URI 的工作示例。
  • 我真的不能很好地解释自己。我试过那个。它对我不起作用。我什至在后面的代码中使用了一个帮助类来排除以错误方式打包 URI 的任何问题。由于某种原因,原始示例对我不起作用。我现在正在重新访问 xaml 版本,但仍然一无所获。然而,我收到一条消息说我的 sys:Uri 没有默认构造函数。
  • 确实,我在理解这个问题时遇到了一些麻烦。请在问题中添加一些其他详细信息,例如,究竟是什么不起作用、错误消息、异常等。

标签: c# wpf spell-checking


【解决方案1】:

您示例中的 URI 是 C: 驱动器上文件夹的磁盘路径。如果要访问作为资源嵌入到应用程序中的 lex 文件,则需要使用“Pack URI”。

请参阅article which you already linked to,以获取用于加载自定义字典的 Pack URI 示例:

private void button1_Click(object sender, RoutedEventArgs e)
{
    IList dictionaries = SpellCheck.GetCustomDictionaries(richTextBox1);

    // customwords2.lex is included as a resource file
    dictionaries.Add(new Uri(@"pack://application:,,,/WPFCustomDictionary;component/customwords2.lex"));
}

【讨论】:

  • 通过更多测试,我发现如果我加载页面选择不同的页面然后返回,这个和另一个示例实际上可以工作。我目前正在尝试调试问题,但发现一些文章谈论禁用然后启用拼写检查。当我发现更多信息时,我会更新这篇文章。
  • 似乎在 CustomDictionaries 中隐藏了一个“Speller”属性,该属性在创建控件时为空,但在重新加载控件时不为空...我找不到有关此的任何文档.
  • 这是正确的答案,因为这就是拼写检查器的工作方式。请查看我的编辑以获取更多解决问题的技巧,因为我的问题更广泛。
【解决方案2】:

在我的情况下,通过将我的 custom.lex 文件上的 Build ActionNone 更改为 Resource

,问题得到了解决

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-29
    • 2012-03-24
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多