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 の 'Speller' プロパティのロードを何かが妨げているようですか? 誰かがこれについて何か知っている場合は、あなたの洞察を投稿してください。

FINAL EDIT
私の目的のテキストボックスは、コードの奥深くに設定された無効フラグが有効になっているグリッド内にありました。以下にコメントされている別のリンクは、この点について語っています。直面するもう 1 つの問題は、ユーザーの選択に応じてページが部分的にレンダリングされることです。一貫した動作を作成するために、テキストボックスがロード/再ロードされるたびに、最後のステップとしてスペルチェックをロードしています。

ユーザーが提案を受け取ったり、ユーザー辞書に追加したりできるように、コンテキスト メニューの拡張機能を作成しました。次に、現在のユーザーに基づいてカスタム辞書をレジストリに送信しています。この方向性は非常にユーザーフレンドリーで、実装が簡単であることがわかりました. 項目を元に戻すには、一時ファイルを作成する必要があります。そのファイルの uri をパックし、カスタム ディクショナリを読み込んだ後、ファイルを削除しました。

これがカスタム スペル チェックの実装に役立つ場合、または質問がある場合はお知らせください。

4

2 に答える 2

2

この例のURIは、C:ドライブ上のフォルダーへのディスクパスです。アプリケーション内にリソースとして埋め込まれているlexファイルにアクセスする場合は、「パックURI」を使用する必要があります。

カスタムディクショナリをロードするために使用されているパック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 に答える