Jaa


RichTextBoxでスペルチェック

WPFにはSpellCheckクラスがあり、TextBoxでもRichTextBoxでもSpellCheck.IsEnabled="True"を加えれば、英語やドイツ語などのスペルチェッカーが使えるはずです。しかし、日本語環境ではそれだけではスペルチェッカーが有効になりません。

TextBox

TextBoxでは以下のように言語を設定すれば英語のスペルチェッカーが使えます。

<TextBox xml:lang="en-US" SpellCheck.IsEnabled="True"  />

RichRextBox

RichTextBoxの場合は話が少し複雑です。

RichTextBoxの中身はFlowDocumentで、ユーザーが入力すると内部にParagraphを作成します。Paragraphでは入力時のキーボード構成を見て言語が設定されるようです。ですから、キーボード構成がENになっていると、言語指定なしでも英語のスペルチェックが有効になります。

image

キーボードがJPのときは(日本語Windowsではこれが標準)、SpellCheck.IsEnabled="True"に加えて、以下のようなコードで、入力後にFlowDocumentの言語を”en-us”に指定しないと、英語のスペルチェックが有効になりません。

private void myRichTextBox_LostFocus(
object sender, RoutedEventArgs e)
{

  RichTextBox rtb = (RichTextBox)sender;
  TextRange tr = new TextRange(rtb.Document.ContentStart,
rtb.Document.ContentEnd);
  tr.ApplyPropertyValue(FrameworkElement.LanguageProperty,
"en-us");
}