Condividi tramite


Procedura: posizionare un menu di scelta rapida personalizzato in un controllo RichTextBox

Aggiornamento: novembre 2007

In questo esempio viene mostrato come posizionare un menu di scelta rapida personalizzato per un oggetto RichTextBox.

L'implementazione di un menu di scelta rapida personalizzato per un oggetto RichTextBox implica la responsabilità della gestione del posizionamento del menu di scelta rapida. Per impostazione predefinita, un menu di scelta rapida personalizzato viene aperto al centro di un oggetto RichTextBox.

Per un esempio pratico, vedere Esempio di posizionamento di un menu di scelta rapida personalizzato in un oggetto RichTextBox.

Esempio

Per eseguire l'override del comportamento del posizionamento predefinito, aggiungere un listener per l'evento ContextMenuOpening. Nell'esempio seguente viene mostrato come eseguire questa operazione a livello di codice.

richTextBox.ContextMenuOpening += new ContextMenuEventHandler(richTextBox_ContextMenuOpening);

Nell'esempio seguente viene mostrata un'implementazione del listener di eventi ContextMenuOpening corrispondente.

// 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;
}

Vedere anche

Concetti

Cenni generali sul controllo RichTextBox

Cenni preliminari sulla classe TextBox