Поделиться через


Практическое руководство. Использование пользовательского контекстного меню в RichTextBox

Обновлен: Ноябрь 2007

В этом примере демонстрируется размещение пользовательского контекстного меню для объекта RichTextBox.

При реализации пользовательского контекстного меню для объекта RichTextBox обработка местоположения контекстного меню реализуется разработчиком. По умолчанию пользовательское контекстное меню открывается в центре объекта RichTextBox.

Работающий пример см. в разделе Пример использования пользовательского всплывающего меню в RichTextBox.

Пример

Чтобы переопределить поведение расположения по умолчанию, добавьте прослушиватель для события ContextMenuOpening. В следующем примере описывается программный способ переопределения.

richTextBox.ContextMenuOpening += new ContextMenuEventHandler(richTextBox_ContextMenuOpening);

В следующем примере демонстрируется реализация соответствующего прослушивателя события ContextMenuOpening.

// This method is intended to listen for the ContextMenuOpening event from a RichTextBox.
// It will position the custom context menu at the end of the current selection.
void richTextBox_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
    // Sender must be RichTextBox.
    RichTextBox rtb = sender as RichTextBox;
    if (rtb == null) return;

    ContextMenu contextMenu = rtb.ContextMenu;
    contextMenu.PlacementTarget = rtb;

    // This uses HorizontalOffset and VerticalOffset properties to position the menu,
    // relative to the upper left corner of the parent element (RichTextBox in this case).
    contextMenu.Placement = PlacementMode.RelativePoint;

    // Compute horizontal and vertical offsets to place the menu relative to selection end.
    TextPointer position = rtb.Selection.End;

    if (position == null) return;

    Rect positionRect = position.GetCharacterRect(LogicalDirection.Forward);
    contextMenu.HorizontalOffset = positionRect.X;
    contextMenu.VerticalOffset = positionRect.Y;

    // Finally, mark the event has handled.
    contextMenu.IsOpen = true;
    e.Handled = true;
}

См. также

Основные понятия

Общие сведения о RichTextBox

Общие сведения о TextBox