2013-02-12 41 views
1

有沒有人使用過WPF 4.0的自定義字典? 我有一個問題讓自定義字典在我的WPF項目中工作。 我一直在嘗試遵循msdn提供的示例,但沒有取得任何進展。WPF 4.0 SpellCheck問題加載自定義字典

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屬性加載到回傳後?如果有人對此有所瞭解,請發表您的見解。

最後編輯
我期望的文本框是一個網格,其已經陷入深套在代碼中啓用已禁用的標誌之內。另一個鏈接評論下面談到這一點。面臨的另一個問題是我的頁面是根據用戶選擇的部分呈現的。爲了創建一致的行爲,我每次加載/重新加載文本框時,都會將拼寫檢查作爲最後一步進行加載。

我創建了一個上下文menut擴展,以允許用戶採取建議或添加到自定義字典。然後我根據當前用戶將我的自定義字典提交到註冊表中。我發現這個方向非常易於使用,並且易於實現。要檢索項目,我需要創建一個臨時文件,打包該文件的uri,然後加載自定義字典後刪除該文件。

如果這可以幫助您實施您的自定義拼寫檢查,或者如果您有任何問題,請讓我知道!

+0

如果你的'.lex'文件設置爲嵌入的資源,你爲什麼要使用一個文件訪問它的路徑?請嘗試使用['pack:'URI](http://msdn.microsoft.com/en-gb/library/aa970069.aspx)。 – 2013-02-12 20:09:00

+0

我也試過。如果你有一個如何做到這一點的工作示例,請讓我知道。 – o0Kvothe0o 2013-02-12 20:16:21

+0

在您的原始問題中,您鏈接到的文章底部有一個Pack URI的工作示例。 – BTownTKD 2013-02-12 20:42:49

回答

2

您示例中的URI是C:驅動器上文件夾的磁盤路徑。如果您想要在應用程序中訪問作爲資源嵌入的lex文件,則需要使用「Pack URI」。

參考article which you already linked to,對於包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")); 
} 
+0

隨着更多的測試,我發現這和其他例子實際上工作,如果我加載頁面選擇不同的頁面,然後回來。我目前正在嘗試調試該問題,但發現一些文章討論禁用然後啓用拼寫檢查。隨着我瞭解更多信息,我會保留這篇文章。 – o0Kvothe0o 2013-02-13 17:04:48

+0

似乎有一個隱藏在CustomDictionaries中的'Speller'屬性,當控件被創建時它是null,但是當控件被重新加載時它不爲null ...我找不到任何文檔。 – o0Kvothe0o 2013-02-13 17:48:58

+0

這是正確的答案,因爲這是拼寫檢查程序應該如何工作。請查看我的編輯以獲取更多解決問題的提示,因爲我的問題更爲廣泛。 – o0Kvothe0o 2013-02-15 14:01:52