TextBox.GetRectFromCharacterIndex(Int32, Boolean) Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt einen rechteckigen Bereich für den vor- oder nachgestellten Rand eines Zeichens an einem bestimmten Zeichenindex zurück.
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
Ein nullbasierter Index des Zeichens, für das das Rechteck abgerufen werden soll.
- trailingEdge
-
Boolean
bool
true , um den nachgestellten Rand zu erhalten; false , um den vorderen Rand des Zeichens abzurufen.
Gibt zurück
Ein Rechteck für den Rand des Zeichens am angegebenen Index.
Beispiele
In diesem Beispiel wird gezeigt, wie Sie getRectFromCharacterIndex verwenden, um das Rechteck für den markierten Text zu bestimmen. Das vollständige Beispiel finden Sie unter Szenario 2 des ContextMenu-Beispiels.
// 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);
}
Hinweise
Um das Kontextmenü außer Kraft zu setzen, können Sie das ContextMenuOpening-Ereignis behandeln und das Standardmenü durch ein benutzerdefiniertes Menü ersetzen. Verwenden Sie GetRectFromCharacterIndex, um zu bestimmen, wo das benutzerdefinierte Menü positioniert werden soll. Ein Beispiel hierfür finden Sie im Szenario 2 in Kontextmenübeispiel. Entwurfsinformationen finden Sie unter Richtlinien für Kontextmenüs.
Da diese Methode ein Rechteck zurückgibt, das einen Zeichenrand darstellt, ist die Breite des zurückgegebenen Rechtecks immer 0. Um die Breite eines Zeichens abzurufen, müssen Sie den X-Wert des führenden Rect vom X-Wert des nachgestellten Rect subtrahieren.