デフォルトのコンテキストメニューにメニュー項目を追加する
-
03-07-2019 - |
質問
RichTextBox
のデフォルトの ContextMenu
にメニュー項目を追加したい。
新しいコンテキストメニューを作成できましたが、デフォルトメニューに表示されるスペルチェックの提案が失われます。
すべてを再実装せずにアイテムを追加する方法はありますか?
解決
RichTextBoxのコンテキストメニューをスペルの提案、切り取り、貼り付けなどで再実装するのはそれほど難しくありません。
次のように、コンテキストメニューを開くイベントをフックします。
AddHandler(RichTextBox.ContextMenuOpeningEvent, new ContextMenuEventHandler(RichTextBox_ContextMenuOpening), true);
イベントハンドラー内で、必要に応じてコンテキストメニューを作成します。次を使用して、既存のコンテキストメニューのメニュー項目を再作成できます。
private IList<MenuItem> GetSpellingSuggestions() { List<MenuItem> spellingSuggestions = new List(); SpellingError spellingError = myRichTextBox.GetSpellingError(myRichTextBox.CaretPosition); 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 = myRichTextBox; spellingSuggestions.Add(mi); } } return spellingSuggestions; } private IList<MenuItem> GetStandardCommands() { List<MenuItem> standardCommands = new List(); MenuItem item = new MenuItem(); item.Command = ApplicationCommands.Cut; standardCommands.Add(item); item = new MenuItem(); item.Command = ApplicationCommands.Copy; standardCommands.Add(item); item = new MenuItem(); item.Command = ApplicationCommands.Paste; standardCommands.Add(item); return standardCommands; }
つづりの間違いがある場合は、次のものですべて無視を作成できます。
MenuItem ignoreAllMI = new MenuItem(); ignoreAllMI.Header = "Ignore All"; ignoreAllMI.Command = EditingCommands.IgnoreSpellingError; ignoreAllMI.CommandTarget = textBox; newContextMenu.Items.Add(ignoreAllMI);
必要に応じてセパレータを追加します。それらを新しいコンテキストメニューの項目に追加してから、光沢のある新しいMenuItemを追加します。
実際のコンテキストメニューを取得する方法を探し続けますが、これは近い将来私が取り組んでいる何かに関連するものです。
所属していません StackOverflow