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.