WPF 4.0 SpellCheck问题加载自定义词典

时间:2013-02-12 19:33:03

标签: c# wpf spell-checking

有没有人在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的'Speller'属性加载直到回发之后?如果有人对此有所了解,请发表您的见解。

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

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

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

2 个答案:

答案 0 :(得分:2)

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

有关用于加载自定义词典的Pack URI的示例,请参阅article which you already linked to

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"));
}

答案 1 :(得分:0)

对于我来说,此问题已通过将我的custom.lex文件上的 Build Action (构建操作)从 None 更改为 Resource

而得以解决。

enter image description here