Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dieses Beispiel zeigt, wie Sie ein benutzerdefiniertes Kontextmenü für ein RichTextBox.
Bei der Implementierung eines benutzerdefinierten Kontextmenüs für ein RichTextBox-Element sind Sie verantwortlich für die Positionierung des Kontextmenüs. Standardmäßig wird ein benutzerdefiniertes Kontextmenü in der Mitte des RichTextBox-Elements geöffnet.
Fügen Sie einen Listener für das ContextMenuOpening-Ereignis hinzu
Um das Standardverhalten bei der Platzierung außer Kraft zu setzen, fügen Sie einen Listener für das ContextMenuOpening-Ereignis hinzu. Das folgende Beispiel zeigt, wie Sie dies programmgesteuert ausführen.
richTextBox.ContextMenuOpening += new ContextMenuEventHandler(richTextBox_ContextMenuOpening);
AddHandler richTextBox.ContextMenuOpening, AddressOf richTextBox_ContextMenuOpening
Implementierung des ContextMenuOpening-Ereignislisteners
Das folgende Beispiel zeigt eine Implementierung des entsprechenden ContextMenuOpening-Ereignislisteners.
// 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;
}
' 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.
Private Sub richTextBox_ContextMenuOpening(ByVal sender As Object, ByVal e As ContextMenuEventArgs)
' Sender must be RichTextBox.
Dim rtb As RichTextBox = TryCast(sender, RichTextBox)
If rtb Is Nothing Then
Return
End If
Dim contextMenu As 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.
Dim position As TextPointer = rtb.Selection.End
If position Is Nothing Then
Return
End If
Dim positionRect As Rect = position.GetCharacterRect(LogicalDirection.Forward)
contextMenu.HorizontalOffset = positionRect.X
contextMenu.VerticalOffset = positionRect.Y
' Finally, mark the event has handled.
contextMenu.IsOpen = True
e.Handled = True
End Sub
Siehe auch
.NET Desktop feedback