TextBox.GetRectFromCharacterIndex(Int32, Boolean) 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
특정 문자 인덱스에서 문자의 선행 또는 후행 가장자리에 대한 사각형 영역을 반환합니다.
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
사각형을 검색할 문자의 인덱스(0부터 시작)입니다.
- trailingEdge
-
Boolean
bool
true 이면 후행 에지를 가져옵니다. false 이면 문자의 선행 가장자리를 가져옵니다.
반환
지정된 인덱스에서 문자 가장자리의 사각형입니다.
예제
이 예제에서는 GetRectFromCharacterIndex를 사용하여 선택한 텍스트의 사각형을 확인하는 방법을 보여줍니다. 전체 예제는 ContextMenu 샘플의 시나리오 2를 참조하세요.
// 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를 사용하여 사용자 지정 메뉴의 위치를 결정합니다. 이에 대한 예제는 ContextMenu 샘플의 시나리오 2를 참조하세요. 디자인 정보는 상황에 맞는 메뉴에 대한 지침을 참조하세요.
이 메서드는 문자 가장자리를 나타내는 사각형을 반환하므로 반환되는 사각형의 너비는 항상 0입니다. 문자의 너비를 얻으려면 후행 Rect의 X 값에서 선행 Rect의 X 값을 빼야 합니다.