看一看MSDN的例子是最好的:
给例子做一下注释:
public MainWindow()
{
InitializeComponent();
myTextBox.ContextMenu = GetContextMenu();//初始化右键菜单(上下文菜单)
}
void tb_ContextMenuOpening(object sender, RoutedEventArgs e)
{
int caretIndex, cmdIndex;
SpellingError spellingError;
myTextBox.ContextMenu = GetContextMenu();//获取默认菜单
caretIndex = myTextBox.CaretIndex;//光标位置
cmdIndex = 0;//菜单项序号
spellingError = myTextBox.GetSpellingError(caretIndex);//获取当前光标处错误,如果没有拼写错误则为null
if (spellingError != null)
{
//对拼写错误的每一个推荐正确拼写, 建立一个菜单项
foreach (string str in spellingError.Suggestions)
{
MenuItem mi = new MenuItem();
mi.Header = str;//菜单项的文本内容
mi.FontWeight = FontWeights.Bold;
mi.Command = EditingCommands.CorrectSpellingError;//菜单项点击执行的命令,是一个更改当前光标处拼写错误的命令.
mi.CommandParameter = str;//这个命令的参数
mi.CommandTarget = myTextBox;//这个命令执行的目标文本框
myTextBox.ContextMenu.Items.Insert(cmdIndex, mi);//把该项加入右键菜单的序号位置
cmdIndex++;//序号自增
}
Separator separatorMenuItem1 = new Separator();
myTextBox.ContextMenu.Items.Insert(cmdIndex, separatorMenuItem1);//插入一个分割横线
cmdIndex++;
MenuItem ignoreAllMI = new MenuItem();//新建一个菜单项,功能是忽略所有拼写错误
ignoreAllMI.Header = "Ignore All";
ignoreAllMI.Command = EditingCommands.IgnoreSpellingError;
ignoreAllMI.CommandTarget = myTextBox;
myTextBox.ContextMenu.Items.Insert(cmdIndex, ignoreAllMI);
cmdIndex++;
Separator separatorMenuItem2 = new Separator();
myTextBox.ContextMenu.Items.Insert(cmdIndex, separatorMenuItem2);//再插入一个分割线,之后就是默认的菜单项.
}
}
private ContextMenu GetContextMenu()
{
ContextMenu cm = new ContextMenu();
//Can create STATIC custom menu items if exists here...
MenuItem m1, m2, m3, m4;
m1 = new MenuItem();
m1.Header = "File";//m1.Command = ApplicationCommands.Save;
m2 = new MenuItem();
m2.Header = "Save";
m3 = new MenuItem();
m3.Header = "SaveAs";
m4 = new MenuItem();
m4.Header = "Recent Files";
//Can add functionality for the custom menu items here...
cm.Items.Add(m1);
cm.Items.Add(m2);
cm.Items.Add(m3);
cm.Items.Add(m4);
return cm;
}
可以在SpellCheck的CustomDictionaries里定义用户词典, 拼写检查会忽略这些词.
http://www.cnblogs.com/gnielee/archive/2010/05/04/wpf4-spellcheck.html 这篇文章给出了一个详细例子.
接着是研究SpellingError类,看看能不能玩出什么花样.