TextBox.GetRectFromCharacterIndex(Int32, Boolean) Método

Definição

Retorna uma região retangular para a borda à esquerda ou à direita de um caractere em um índice de caracteres específico.

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

Parâmetros

charIndex
Int32

int

Um índice baseado em zero do caractere para o qual recuperar o retângulo.

trailingEdge
Boolean

bool

true para obter a borda à direita; false para obter a borda superior do caractere.

Retornos

Um retângulo para a borda do caractere no índice especificado.

Exemplos

Este exemplo mostra como usar GetRectFromCharacterIndex para determinar o retângulo do texto selecionado. Para obter o exemplo completo, consulte Cenário 2 do exemplo 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);
}

Comentários

Para substituir o menu de contexto, você pode manipular o evento ContextMenuOpening e substituir o menu padrão por um menu personalizado. Use GetRectFromCharacterIndex para determinar onde posicionar o menu personalizado. Para obter um exemplo disso, consulte o cenário 2 do exemplo de ContextMenu. Para obter informações de design, consulte Diretrizes para menus de contexto.

Como esse método retorna um retângulo que representa uma borda de caractere, a largura do retângulo retornado é sempre 0. Para obter a largura de um caractere, você deve subtrair o valor X do Rect à esquerda do valor X do Rect à direita.

Aplica-se a