我在Wpf应用程序中对自定义词典进行了拼写检查,因为它无法识别IΔn。
如果我添加一个行为来尝试和处理IΔn,DoSpellCheck()在您键入或粘贴文本到文本框时起作用,但在调用textBox_Loaded(对象发送者,RoutedEventArgs e)时不起作用。
任何帮助都会受到赞赏。
public class TextBoxExtendedSpellCheckBehavior:Behavior { private static Key [] _nonInputKeys = new Key [] {Key.Left,Key.Up,Key.Right,Key.Down,Key.Tab,Key.Delete,Key.Back,Key.Escape,Key.Enter}; < / p>
protected override void OnAttached()
{
if (AssociatedObject is TextBox)
{
TextBox textBox = AssociatedObject as TextBox;
textBox.PreviewKeyUp += OnTextBox_PreviewKeyUp;
textBox.LostFocus += OnTextBox_LostFocus;
textBox.TextChanged += OnTextChanged;
textBox.Loaded += textBox_Loaded;
}
base.OnAttached();
}
void textBox_Loaded(object sender, RoutedEventArgs e)
{
TextBox textBox = sender as TextBox;
if (textBox != null)
{
DoSpellCheck(textBox);
}
}
protected override void OnDetaching()
{
if (AssociatedObject is TextBox)
{
TextBox textBox = AssociatedObject as TextBox;
textBox.PreviewKeyUp -= OnTextBox_PreviewKeyUp;
textBox.LostFocus -= OnTextBox_LostFocus;
textBox.Loaded -= textBox_Loaded;
}
base.OnDetaching();
}
private static void OnTextChanged(object sender, TextChangedEventArgs e)
{
if (sender is TextBox)
{
TextBox textBox = sender as TextBox;
if (textBox != null && textBox.IsLoaded == true)
{
DoSpellCheck(textBox);
}
}
}
private bool IsInputKey(Key key)
{
return !_nonInputKeys.Contains(key);
}
private void OnTextBox_PreviewKeyUp(object sender, KeyEventArgs e)
{
if (sender is TextBox && IsInputKey(e.Key))
{
TextBox textBox = sender as TextBox;
DoSpellCheck(textBox);
}
}
private void OnTextBox_LostFocus(object sender, RoutedEventArgs e)
{
if (sender is TextBox)
{
TextBox textBox = sender as TextBox;
DoSpellCheck(textBox);
}
}
public static void DoSpellCheck(TextBox textBox)
{
const string iDelta = "I∆n";
int index = textBox.Text.IndexOf(iDelta);
if (index > 0)
{
int iStart = textBox.GetSpellingErrorStart(index);
if (iStart > -1)
{
SpellingError spellingError = textBox.GetSpellingError(iStart);
if (spellingError != null)
{
spellingError.IgnoreAll();
}
}
}
}
}