Выбор текста с классом SpellingError
У меня есть текстовое поле WPF, в котором я включил проверку орфографии. Я добавил к нему контекстное меню, чтобы при появлении орфографической ошибки пользователь мог выбрать слово, и раскрывающееся меню выглядит так:
Теперь, если вы посмотрите на выпадающее меню, есть дополнительные пункты меню, такие как Поиск в Google и Определить. Это очень важно и всегда должно быть там. Проблема в том, что, скажем, я выбрал эти слова:
monky strt
Оба эти слова написаны неправильно, однако я хотел бы найти их в Google. Когда я продолжаю делать это вместо того, чтобы выбирать оба слова, он выбирает первое неверное слово в строке. Вот что я имею в виду:
Я выбрал оба слова: Monky Strt, но Monky выбирается. Есть ли способ выбора обоих слов независимо от того, являются ли они неправильными или нет. НО, если я выберу целое предложение, оно будет работать нормально:
Вот мой код того, как я справляюсь со всем этим:
Dim index As Integer = 0
Me.ctrl_TextBox.ContextMenu.Items.Clear()
'Clearing the existing items
'Getting the spellcheck suggestions.
Dim spellingError As SpellingError = Me.ctrl_TextBox.GetSpellingError(Me.ctrl_TextBox.CaretIndex)
If spellingError IsNot Nothing AndAlso spellingError.Suggestions.Count() >= 1 Then
For Each suggestion As String In spellingError.Suggestions
Dim menuItem As New MenuItem()
menuItem.Header = suggestion
menuItem.FontWeight = FontWeights.Bold
menuItem.Command = EditingCommands.CorrectSpellingError
menuItem.CommandParameter = suggestion
menuItem.CommandTarget = Me.ctrl_TextBox
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, menuItem)
index += 1
Next
Dim seperator As New Separator()
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, seperator)
index += 1
'Adding the IgnoreAll menu item
Dim IgnoreAllMenuItem As New MenuItem()
IgnoreAllMenuItem.Header = "Ignore All"
IgnoreAllMenuItem.Command = EditingCommands.IgnoreSpellingError
IgnoreAllMenuItem.CommandTarget = Me.ctrl_TextBox
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, IgnoreAllMenuItem)
index += 1
Else
'No Suggestions found, add a disabled NoSuggestions menuitem.
Dim menuItem As New MenuItem()
menuItem.Header = "No Suggestions"
menuItem.IsEnabled = False
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, menuItem)
index += 1
End If
'.Net 4.0 Supports CustomDictionaries, Option for Adding to dictionary.
Dim selectionStart As Integer = Me.ctrl_TextBox.GetSpellingErrorStart(Me.ctrl_TextBox.CaretIndex)
If selectionStart >= 0 Then
Dim seperator1 As New Separator()
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, seperator1)
index += 1
Dim AddToDictionary As New MenuItem()
AddToDictionary.Header = "Add to Dictionary"
'Getting the word to add
Me.ctrl_TextBox.SelectionStart = selectionStart
Me.ctrl_TextBox.SelectionLength = Me.ctrl_TextBox.GetSpellingErrorLength(Me.ctrl_TextBox.CaretIndex)
'Ignoring the added word.
AddToDictionary.Command = EditingCommands.IgnoreSpellingError
AddToDictionary.CommandTarget = Me.ctrl_TextBox
AddHandler AddToDictionary.Click, AddressOf AddToDictionary_Click
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, AddToDictionary)
index += 1
End If
'Common Edit MenuItems.
Dim seperator2 As New Separator()
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, seperator2)
index += 1
If ctrl_TextBox.SelectionLength > 0 Then
'Search
Dim searchMenuItem As New MenuItem()
Dim EllipsisSearchString As String = ctrl_TextBox.SelectedText
If EllipsisSearchString.Length > 16 Then
EllipsisSearchString = Truncate(ctrl_TextBox.SelectedText, 16) + "..."
Else
EllipsisSearchString = Truncate(ctrl_TextBox.SelectedText, 16).ToString
End If
searchMenuItem.Header = "Search Google for " + "'" + EllipsisSearchString + "'"
AddHandler searchMenuItem.Click, AddressOf searchMenuItem_Click
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, searchMenuItem)
index += 1
Dim EllipsisDefineString As String = ctrl_TextBox.SelectedText
If EllipsisDefineString.Length > 16 Then
EllipsisDefineString = Truncate(ctrl_TextBox.SelectedText, 16) + "..."
Else
EllipsisDefineString = Truncate(ctrl_TextBox.SelectedText, 16).ToString
End If
Dim defineMenuItem As New MenuItem()
defineMenuItem.Header = "Define " + "'" + EllipsisDefineString + "'"
AddHandler defineMenuItem.Click, AddressOf defineMenuItem_Click
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, defineMenuItem)
index += 1
Dim seperator22 As New Separator()
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, seperator22)
index += 1
End If
'Cut
Dim cutMenuItem As New MenuItem()
cutMenuItem.Command = ApplicationCommands.Cut
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, cutMenuItem)
index += 1
'Copy
Dim copyMenuItem As New MenuItem()
copyMenuItem.Command = ApplicationCommands.Copy
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, copyMenuItem)
index += 1
'Paste
Dim pasteMenuItem As New MenuItem()
pasteMenuItem.Command = ApplicationCommands.Paste
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, pasteMenuItem)
index += 1
Dim seperator3 As New Separator()
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, seperator3)
index += 1
'Delete
Dim deleteMenuItem As New MenuItem()
deleteMenuItem.Command = ApplicationCommands.Delete
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, deleteMenuItem)
index += 1
Dim seperator4 As New Separator()
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, seperator4)
index += 1
'Select All
Dim selectAllMenuItem As New MenuItem()
selectAllMenuItem.Command = ApplicationCommands.SelectAll
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, selectAllMenuItem)
index += 1
1 ответ
Так что мне наконец удалось решить эту проблему, удалив:
'.Net 4.0 Supports CustomDictionaries, Option for Adding to dictionary.
Dim selectionStart As Integer = Me.ctrl_TextBox.GetSpellingErrorStart(Me.ctrl_TextBox.CaretIndex)
If selectionStart >= 0 Then
Dim seperator1 As New Separator()
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, seperator1)
index += 1
Dim AddToDictionary As New MenuItem()
AddToDictionary.Header = "Add to Dictionary"
'Getting the word to add
Me.ctrl_TextBox.SelectionStart = selectionStart
Me.ctrl_TextBox.SelectionLength = Me.ctrl_TextBox.GetSpellingErrorLength(Me.ctrl_TextBox.CaretIndex)
'Ignoring the added word.
AddToDictionary.Command = EditingCommands.IgnoreSpellingError
AddToDictionary.CommandTarget = Me.ctrl_TextBox
AddHandler AddToDictionary.Click, AddressOf AddToDictionary_Click
Me.ctrl_TextBox.ContextMenu.Items.Insert(index, AddToDictionary)
index += 1
End If