1

有没有人在 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,然后在加载自定义字典后删除该文件。

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

4

2 回答 2

2

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

有关用于加载自定义字典的 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"));
}
于 2013-02-12T20:45:35.860 回答
1

在我的情况下,通过将我的 custom.lex 文件上的构建操作从无更改为资源来解决问题

在此处输入图像描述

于 2019-05-28T13:59:48.013 回答