デフォルトのにメニュー項目を追加したいのですContextMenu
がRichTextBox
。
新しいコンテキストメニューを作成することはできますが、デフォルトのメニューに表示されるスペルチェックの提案が失われます。
すべてを再実装せずにアイテムを追加する方法はありますか?
デフォルトのにメニュー項目を追加したいのですContextMenu
がRichTextBox
。
新しいコンテキストメニューを作成することはできますが、デフォルトのメニューに表示されるスペルチェックの提案が失われます。
すべてを再実装せずにアイテムを追加する方法はありますか?
スペル候補、切り取り、貼り付けなどを使用して RichTextBox コンテキスト メニューを再実装するのはそれほど難しいことではありません。
コンテキスト メニューを開くイベントを次のようにフックします。
AddHandler(RichTextBox.ContextMenuOpeningEvent, new ContextMenuEventHandler(RichTextBox_ContextMenuOpening), true);
イベント ハンドラー内で、必要に応じてコンテキスト メニューを作成します。次のコマンドを使用して、既存のコンテキスト メニュー メニュー項目を再作成できます。
プライベート IList<MenuItem> GetSpellingSuggestions() { List<MenuItem> spellingSuggestions = new List(); SpellingError spellingError = myRichTextBox.GetSpellingError(myRichTextBox.CaretPosition); if (spellingError != null) { foreach (spellingError.Suggestions の文字列 str) { MenuItem mi = new MenuItem(); mi.Header = str; mi.FontWeight = FontWeights.Bold; mi.Command = EditingCommands.CorrectSpellingError; mi.CommandParameter = str; mi.CommandTarget = myRichTextBox; spellingSuggestions.Add(mi); } } スペル候補を返します。 } プライベート IList<MenuItem> GetStandardCommands() { List<MenuItem> standardCommands = new List(); MenuItem item = new MenuItem(); item.Command = ApplicationCommands.Cut; standardCommands.Add(アイテム); item = new MenuItem(); item.Command = ApplicationCommands.Copy; standardCommands.Add(アイテム); item = new MenuItem(); item.Command = ApplicationCommands.Paste; standardCommands.Add(アイテム); 標準コマンドを返します。 }
スペルミスがある場合は、次のようにすべて無視を作成できます。
MenuItem ignoreAllMI = new MenuItem(); ignoreAllMI.Header = "すべて無視"; ignoreAllMI.Command = EditingCommands.IgnoreSpellingError; ignoreAllMI.CommandTarget = textBox; newContextMenu.Items.Add(ignoreAllMI);
必要に応じてセパレーターを追加します。それらを新しいコンテキスト メニューの項目に追加してから、ピカピカの新しい MenuItems を追加します。
ただし、実際のコンテキスト メニューを取得する方法を探し続けます。これは、近い将来に取り組む予定のものに関連するためです。