Freigeben über


TextBox.GetRectFromCharacterIndex(Int32, Boolean) Methode

Definition

Gibt einen rechteckigen Bereich für den vor- oder nachgestellten Rand eines Zeichens an einem bestimmten Zeichenindex zurück.

public:
 virtual Rect GetRectFromCharacterIndex(int charIndex, bool trailingEdge) = GetRectFromCharacterIndex;
Rect GetRectFromCharacterIndex(int const& charIndex, bool const& trailingEdge);
public Rect GetRectFromCharacterIndex(int charIndex, bool trailingEdge);
function getRectFromCharacterIndex(charIndex, trailingEdge)
Public Function GetRectFromCharacterIndex (charIndex As Integer, trailingEdge As Boolean) As Rect

Parameter

charIndex
Int32

int

Ein nullbasierter Index des Zeichens, für das das Rechteck abgerufen werden soll.

trailingEdge
Boolean

bool

true , um den hinteren Rand zu erhalten; false , um den Hauptrand des Zeichens abzurufen.

Gibt zurück

Ein Rechteck für den Rand des Zeichens am angegebenen Index.

Beispiele

In diesem Beispiel wird gezeigt, wie Sie getRectFromCharacterIndex verwenden, um das Rechteck für den ausgewählten Text zu bestimmen. Das vollständige Beispiel finden Sie unter Szenario 2 des ContextMenu-Beispiels.

// Returns a rect for selected text.
// If no text is selected, returns caret location.
// Text box should not be empty.
private Rect GetTextboxSelectionRect(TextBox textbox)
{
    Rect rectFirst, rectLast;
    if (textbox.SelectionStart == textbox.Text.Length)
    {
        rectFirst = textbox.GetRectFromCharacterIndex(textbox.SelectionStart - 1, true);
    }
    else
    {
        rectFirst = textbox.GetRectFromCharacterIndex(textbox.SelectionStart, false);
    }

    int lastIndex = textbox.SelectionStart + textbox.SelectionLength;
    if (lastIndex == textbox.Text.Length)
    {
        rectLast = textbox.GetRectFromCharacterIndex(lastIndex - 1, true);
    }
    else
    {
        rectLast = textbox.GetRectFromCharacterIndex(lastIndex, false);
    }

    GeneralTransform buttonTransform = textbox.TransformToVisual(null);
    Point point = buttonTransform.TransformPoint(new Point());

    // Make sure that we return a valid rect if selection is on multiple lines
    // and end of the selection is to the left of the start of the selection.
    double x, y, dx, dy;
    y = point.Y + rectFirst.Top;
    dy = rectLast.Bottom - rectFirst.Top;
    if (rectLast.Right > rectFirst.Left)
    {
        x = point.X + rectFirst.Left;
        dx = rectLast.Right - rectFirst.Left;
    }
    else
    {
        x = point.X + rectLast.Right;
        dx = rectFirst.Left - rectLast.Right;
    }

    return new Rect(x, y, dx, dy);
}

Hinweise

Um das Kontextmenü zu überschreiben, behandeln Sie das ContextMenuOpening-Ereignis , und ersetzen Sie das Standardmenü durch ein benutzerdefiniertes Menü. Verwenden Sie GetRectFromCharacterIndex, um zu bestimmen, wo das benutzerdefinierte Menü positioniert werden soll. Ein Beispiel hierfür finden Sie im Szenario 2 in Kontextmenübeispiel. Entwurfsinformationen finden Sie unter Richtlinien für Kontextmenüs.

Da diese Methode ein Rechteck zurückgibt, das einen Zeichenrand darstellt, ist die Breite des zurückgegebenen Rechtecks immer 0. Um die Breite eines Zeichens abzurufen, müssen Sie den X-Wert des führenden Rect vom X-Wert des nachfolgenden Rect subtrahieren.

Gilt für: