TextBox.GetRectFromCharacterIndex(Int32, Boolean) Metode

Definisi

Mengembalikan wilayah persegi panjang untuk tepi awal atau akhir karakter pada indeks karakter tertentu.

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

Indeks karakter berbasis nol untuk mengambil persegi panjang.

trailingEdge
Boolean

bool

true untuk mendapatkan tepi berikutnya; false untuk mendapatkan tepi utama karakter.

Mengembalikan

Persegi panjang untuk tepi karakter pada indeks yang ditentukan.

Contoh

Contoh ini menunjukkan cara menggunakan GetRectFromCharacterIndex untuk menentukan persegi panjang untuk teks yang dipilih. Untuk contoh lengkapnya, lihat Skenario 2 dari sampel 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);
}

Keterangan

Untuk mengganti menu konteks, tangani peristiwa ContextMenuOpening dan ganti menu default dengan menu kustom. Gunakan GetRectFromCharacterIndex untuk menentukan tempat memposisikan menu kustom. Untuk contoh ini, lihat Skenario 2 dari sampel ContextMenu. Untuk informasi desain, lihat Panduan untuk menu konteks.

Karena metode ini mengembalikan persegi panjang yang mewakili tepi karakter, lebar persegi panjang yang dikembalikan selalu 0. Untuk mendapatkan lebar karakter, Anda harus mengurangi nilai Xrect utama dari nilai X dari Rect berikutnya.

Berlaku untuk