Condividi tramite


TextBox.GetRectFromCharacterIndex(Int32, Boolean) Metodo

Definizione

Restituisce un'area rettangolare per il bordo iniziale o finale di un carattere in corrispondenza di un indice di caratteri specifico.

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

Parametri

charIndex
Int32

int

Indice in base zero del carattere per il quale recuperare il rettangolo.

trailingEdge
Boolean

bool

true per ottenere il bordo finale; false per ottenere il bordo iniziale del carattere.

Restituisce

Rettangolo per il bordo del carattere in corrispondenza dell'indice specificato.

Esempio

In questo esempio viene illustrato come usare GetRectFromCharacterIndex per determinare il rettangolo per il testo selezionato. Per l'esempio completo, vedere Scenario 2 dell'esempio ContextMenu.

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

Commenti

Per eseguire l'override del menu di scelta rapida, è possibile gestire l'evento ContextMenuOpening e sostituire il menu predefinito con un menu personalizzato. Usare GetRectFromCharacterIndex per determinare dove posizionare il menu personalizzato. Per un esempio di questa operazione, vedi lo scenario 2 nell'esempio di ContextMenu. Per informazioni sulla progettazione, vedi Linee guida per i menu di scelta rapida.

Poiché questo metodo restituisce un rettangolo che rappresenta un bordo carattere, la larghezza del rettangolo restituito è sempre 0. Per ottenere la larghezza di un carattere, è necessario sottrarre il valore X del rect iniziale dal valore X del rect finale.

Si applica a