Поделиться через


TextBox.GetRectFromCharacterIndex(Int32, Boolean) Метод

Определение

Возвращает прямоугольную область для начального или конечного края символа в определенном индексе символа.

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

Параметры

charIndex
Int32

int

Отсчитываемый от нуля индекс символа, для которого извлекается прямоугольник.

trailingEdge
Boolean

bool

значение true , чтобы получить конечный край; значение false , чтобы получить передний край символа.

Возвращаемое значение

Прямоугольник для края символа по указанному индексу.

Примеры

В этом примере показано, как с помощью GetRectFromCharacterIndex определить прямоугольник для выделенного текста. Полный пример см. в разделе Сценарий 2 примера 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);
}

Комментарии

Чтобы переопределить контекстное меню, обработайте событие ContextMenuOpening и замените меню по умолчанию пользовательским меню. Используйте GetRectFromCharacterIndex, чтобы определить расположение настраиваемого меню. Пример см. в сценарии 2 элемента ContextMenu sample. Сведения о проектировании см. в разделе Рекомендации по контекстным меню.

Так как этот метод возвращает прямоугольник, представляющий край символа, ширина возвращаемого прямоугольника всегда равна 0. Чтобы получить ширину символа, необходимо вычесть значение X в начале rect из значения X в конце rect.

Применяется к