TextPointer Klasse
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.
Stellt eine Position innerhalb eines FlowDocument oder einer .TextBlock
public ref class TextPointer : System::Windows::Documents::ContentPosition
public class TextPointer : System.Windows.Documents.ContentPosition
type TextPointer = class
inherit ContentPosition
Public Class TextPointer
Inherits ContentPosition
- Vererbung
Beispiele
Im folgenden Beispiel wird veranschaulicht, wie TextPointer sie eine Position direkt innerhalb des ersten Run Elements in einem angegebenen Textcontainer finden.
// This method returns the position just inside of the first text Run (if any) in a
// specified text container.
TextPointer FindFirstRunInTextContainer(DependencyObject container)
{
TextPointer position = null;
if (container != null){
if (container is FlowDocument)
position = ((FlowDocument)container).ContentStart;
else if (container is TextBlock)
position = ((TextBlock)container).ContentStart;
else
return position;
}
// Traverse content in forward direction until the position is immediately after the opening
// tag of a Run element, or the end of content is encountered.
while (position != null)
{
// Is the current position just after an opening element tag?
if (position.GetPointerContext(LogicalDirection.Backward) == TextPointerContext.ElementStart)
{
// If so, is the tag a Run?
if (position.Parent is Run)
break;
}
// Not what we're looking for; on to the next position.
position = position.GetNextContextPosition(LogicalDirection.Forward);
}
// This will be either null if no Run is found, or a position just inside of the first Run element in the
// specifed text container. Because position is formed from ContentStart, it will have a logical direction
// of Backward.
return position;
}
' This method returns the position just inside of the first text Run (if any) in a
' specified text container.
Private Function FindFirstRunInTextContainer(ByVal container As DependencyObject) As TextPointer
Dim position As TextPointer = Nothing
If container IsNot Nothing Then
If TypeOf container Is FlowDocument Then
position = (CType(container, FlowDocument)).ContentStart
ElseIf TypeOf container Is TextBlock Then
position = (CType(container, TextBlock)).ContentStart
Else
Return position
End If
End If
' Traverse content in forward direction until the position is immediately after the opening
' tag of a Run element, or the end of content is encountered.
Do While position IsNot Nothing
' Is the current position just after an opening element tag?
If position.GetPointerContext(LogicalDirection.Backward) = TextPointerContext.ElementStart Then
' If so, is the tag a Run?
If TypeOf position.Parent Is Run Then
Exit Do
End If
End If
' Not what we're looking for on to the next position.
position = position.GetNextContextPosition(LogicalDirection.Forward)
Loop
' This will be either null if no Run is found, or a position just inside of the first Run element in the
' specifed text container. Because position is formed from ContentStart, it will have a logical direction
' of Backward.
Return position
End Function
Im folgenden Beispiel wird ein einfacher Suchalgorithmus mithilfe von TextPointer Einrichtungen implementiert.
// This method will search for a specified word (string) starting at a specified position.
TextPointer FindWordFromPosition(TextPointer position, string word)
{
while (position != null)
{
if (position.GetPointerContext(LogicalDirection.Forward) == TextPointerContext.Text)
{
string textRun = position.GetTextInRun(LogicalDirection.Forward);
// Find the starting index of any substring that matches "word".
int indexInRun = textRun.IndexOf(word);
if (indexInRun >= 0)
{
position = position.GetPositionAtOffset(indexInRun);
break;
}
}
else
{
position = position.GetNextContextPosition(LogicalDirection.Forward);
}
}
// position will be null if "word" is not found.
return position;
}
' This method will search for a specified word (string) starting at a specified position.
Private Function FindWordFromPosition(ByVal position As TextPointer, ByVal word As String) As TextPointer
Do While position IsNot Nothing
If position.GetPointerContext(LogicalDirection.Forward) = TextPointerContext.Text Then
Dim textRun As String = position.GetTextInRun(LogicalDirection.Forward)
' Find the starting index of any substring that matches "word".
Dim indexInRun As Integer = textRun.IndexOf(word)
If indexInRun >= 0 Then
position = position.GetPositionAtOffset(indexInRun)
Exit Do
End If
Else
position = position.GetNextContextPosition(LogicalDirection.Forward)
End If
Loop
' position will be null if "word" is not found.
Return position
End Function
Hinweise
Die TextPointer Klasse führt die folgende Terminologie ein:
Position - Inhärent zeigt eine TextPointer immer auf eine Position im Inhalt. Solche Positionen fallen entweder zwischen Zeichen im Inhalt oder zwischen Flussinhaltselementtags, die die Struktur für den Inhalt definieren.
Aktuelle Position – Da eine TextPointer Position immer angibt, und da viele der Vorgänge, die durch eine TextPointer ausgeführt werden können, relativ zu der position sind, auf die derzeit durch die TextPointerPosition verwiesen wird, ist es sinnvoll, einfach auf die position zu verweisen, die durch eine TextPointer als aktuelle Position angegeben ist.
Einfügeposition – Eine Einfügeposition ist eine Position, an der neue Inhalte hinzugefügt werden können, ohne semantische Regeln für den zugehörigen Inhalt zu unterbrechen. In der Praxis befindet sich eine Einfügeposition an einer beliebigen Stelle im Inhalt, an der ein Caret positioniert werden kann. Ein Beispiel für eine gültige TextPointer Position, die keine Einfügeposition ist, ist die Position zwischen zwei angrenzenden Paragraph Tags (d. a. zwischen dem schließenden Tag des vorherigen Absatzes und dem öffnenden Tag des nächsten Absatzes).
Symbol - Für Die Zwecke von TextPointer Vorgängen, die Symbole umfassen, wird eines der folgenden Symbole als Symbol betrachtet:
Ein öffnender oder schließender Tag für ein TextElement Element.
Ein UIElement Element, das in einem InlineUIContainer oder BlockUIContainer. Beachten Sie, dass ein UIElement solches Symbol immer als genau ein Symbol gezählt wird. Alle zusätzlichen Inhalte oder Elemente, die in den UIElement Elementen enthalten sind, werden nicht als Symbole gezählt.
Jedes 16-Bit-Unicode-Zeichen innerhalb eines Textelements Run .
Textcontainer – Ein Textcontainer ist das Element, das den ultimativen Rahmen für den von Hand stehenden Flussinhalt bildet; die durch einen TextPointer Textcontainer angegebene Position immer in einen Textcontainer fällt. Derzeit muss ein Textcontainer entweder ein FlowDocument oder ein TextBlockTextcontainer sein. Im Allgemeinen werden Vorgänge zwischen TextPointer Instanzen in verschiedenen Textcontainern nicht unterstützt.
Dokument – Der Inhalt in einem Textcontainer wird wie in der IsInSameDocument Methode und den DocumentStartDocumentEnd Eigenschaften als Dokument bezeichnet.
Die TextPointer Klasse soll das Durchlaufen und Bearbeiten von Inhalten erleichtern, die durch Windows Presentation Foundation (WPF)-Flussinhaltselemente dargestellt werden; im Allgemeinen werden solche Elemente von TextElementdiesen abgeleitet. Einige der Vorgänge, die TextPointer folgendes erleichtern:
Führen Sie einen Ordinalvergleich der aktuellen Position mit einer zweiten angegebenen Position aus. Siehe die CompareTo Methode.
Bestimmen Sie den Inhaltstyp neben der aktuellen Position in einer angegebenen Richtung. Siehe Die GetPointerContext Methode und TextPointerContext Aufzählung.
Dient zum Abrufen der TextElement Bereiche oder neben der aktuellen Position. Siehe Paragraph und die GetAdjacentElement Methode.
Rufen Sie den Textcontainer ab, der das aktuelle Dokument eingrenzt. Siehe die Parent Eigenschaft.
Dient zum Abrufen einer angegebenen Anzahl von Zeichen vor oder nach der aktuellen Position. Siehe die GetTextInRun Methode.
Fügen Sie eine Zeichenfolge mit Zeichen an der aktuellen Position ein. Siehe die InsertTextInRun Methode.
Suchen von Zeilenbegrenzungen in Inhalten. Siehe die GetLineStartPosition Methode und IsAtLineStartPosition Eigenschaft.
Übersetzen Sie zwischen TextPointer Positionen und Symbolversatz in Inhalt. Siehe die Methoden und GetPositionAtOffset Die GetOffsetToPosition Methoden.
Führen Sie visuelle Treffertests durch Übersetzen zwischen einer TextPointer Position und einer Point relativen Koordinate durch.
Suchen Sie eine Einfügeposition in der Nähe, oder überprüfen Sie, ob es sich bei der aktuellen Position um eine Einfügeposition handelt. Siehe die GetInsertionPosition Methoden und GetNextInsertionPosition die IsAtInsertionPosition Eigenschaft.
Die Position und LogicalDirection die durch ein TextPointer Objekt angegebene Position sind unveränderlich. Wenn Inhalte bearbeitet oder geändert werden, ändert sich die durch eine TextPointer Angegebene Position nicht relativ zum umgebenden Text. Vielmehr wird der Offset dieser Position vom Anfang des Inhalts entsprechend angepasst, um die neue relative Position im Inhalt widerzuspiegeln. Ein Element, das beispielsweise eine Position am Anfang eines bestimmten Absatzes angibt, TextPointer zeigt weiterhin auf den Anfang dieses Absatzes, auch wenn Inhalte vor oder nach dem Absatz eingefügt oder gelöscht werden.
Die TextPointer Klasse stellt keine öffentlichen Konstruktoren bereit. Eine Instanz von TextPointer wird mithilfe von Eigenschaften oder Methoden anderer Objekte (einschließlich anderer TextPointer Objekte) erstellt. Die folgende Liste enthält einige Beispiele für Methoden und Eigenschaften, die ein TextPointerObjekt erstellen und zurückgeben. Diese Liste ist nicht vollständig:
Von einem TextElement: ContentStart, ContentEnd, , ElementStartund ElementEnd.
Aus einem TextBlock (Textcontainer): ContentStart, ContentEndund GetPositionFromPoint.
Aus einem FlowDocument (Textcontainer): ContentStartund ContentEnd
Aus einer vorhandenen TextPointer: DocumentStart, DocumentEnd, , GetNextInsertionPositionund GetPositionAtOffset.
Eigenschaften
| Name | Beschreibung |
|---|---|
| DocumentEnd |
Ruft ein TextPointer Am Ende des Inhalts im Textcontainer ab, der der aktuellen Position zugeordnet ist. |
| DocumentStart |
Ruft einen TextPointer am Anfang des Inhalts im Textcontainer ab, der der aktuellen Position zugeordnet ist. |
| HasValidLayout |
Ruft einen Wert ab, der angibt, ob der textcontainer, der der aktuellen Position zugeordnet ist, ein gültiges Layout (up-to-date) aufweist. |
| IsAtInsertionPosition |
Ruft einen Wert ab, der angibt, ob die aktuelle Position eine Einfügeposition ist. |
| IsAtLineStartPosition |
Ruft einen Wert ab, der angibt, ob sich die aktuelle Position am Anfang einer Zeile befindet. |
| LogicalDirection |
Ruft die logische Richtung ab, die der aktuellen Position zugeordnet ist, die verwendet wird, um mehrdeutigen Inhalt zu unterscheiden, der der aktuellen Position zugeordnet ist. |
| Paragraph |
Ruft den Absatz ab, der die aktuelle Position angibt, falls vorhanden. |
| Parent |
Ruft das logische übergeordnete Element ab, das die aktuelle Position eingrenzt. |
Methoden
| Name | Beschreibung |
|---|---|
| CompareTo(TextPointer) |
Führt einen Ordinalvergleich zwischen den positionen aus, die durch den aktuellen TextPointer und einen zweiten angegebenen Wert angegeben wurden TextPointer. |
| DeleteTextInRun(Int32) |
Löscht die angegebene Anzahl von Zeichen aus der position, die durch die aktuelle .TextPointer |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetAdjacentElement(LogicalDirection) |
Gibt das Element (falls vorhanden) zurück, das den Aktuellen in der angegebenen logischen TextPointer Richtung umgibt. |
| GetCharacterRect(LogicalDirection) |
Gibt ein umgebendes Feld (Rect) für Inhalte zurück, die den Aktuellen in der angegebenen logischen TextPointer Richtung umgrenzen. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetInsertionPosition(LogicalDirection) |
Gibt eine TextPointer bis zur nächstgelegenen Einfügeposition in der angegebenen logischen Richtung zurück. |
| GetLineStartPosition(Int32, Int32) |
Gibt einen TextPointer Wert an den Anfang einer Zeile zurück, die relativ zum aktuellen TextPointerAngegeben ist, und gibt an, wie viele Zeilen übersprungen wurden. |
| GetLineStartPosition(Int32) |
Gibt einen TextPointer Wert an den Anfang einer Zeile zurück, die relativ zur aktuellen TextPointerZeile angegeben wird. |
| GetNextContextPosition(LogicalDirection) |
Gibt einen Zeiger auf das nächste Symbol in der angegebenen logischen Richtung zurück. |
| GetNextInsertionPosition(LogicalDirection) |
Gibt eine TextPointer an die nächste Einfügeposition in der angegebenen logischen Richtung zurück. |
| GetOffsetToPosition(TextPointer) |
Gibt die Anzahl der Symbole zwischen dem aktuellen TextPointer und einem zweiten angegebenen Zurück TextPointer. |
| GetPointerContext(LogicalDirection) |
Gibt einen Kategorieindikator für den Inhalt neben dem aktuellen TextPointer in der angegebenen logischen Richtung zurück. |
| GetPositionAtOffset(Int32, LogicalDirection) |
Gibt eine TextPointer an die Position zurück, die durch den angegebenen Offset (in Symbolen) vom Anfang des Aktuellen TextPointer und in der angegebenen Richtung angegeben ist. |
| GetPositionAtOffset(Int32) |
Gibt eine TextPointer an die Position zurück, die durch den angegebenen Offset (in Symbolen) vom Anfang des aktuellen TextPointerOffsets angegeben ist. |
| GetTextInRun(LogicalDirection, Char[], Int32, Int32) |
Kopiert die angegebene maximale Anzahl von Zeichen aus einem angrenzenden Text in die angegebene Richtung in ein vom Aufrufer bereitgestelltes Zeichenarray. |
| GetTextInRun(LogicalDirection) |
Gibt eine Zeichenfolge zurück, die neben dem aktuellen Text in der angegebenen logischen TextPointer Richtung liegt. |
| GetTextRunLength(LogicalDirection) |
Gibt die Anzahl der Unicode-Zeichen zwischen dem aktuellen TextPointer und dem nächsten Nicht-Text-Symbol in der angegebenen logischen Richtung zurück. |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| InsertLineBreak() |
Fügt einen Zeilenumbruch an der aktuellen Position ein. |
| InsertParagraphBreak() |
Fügt an der aktuellen Position einen Absatzwechsel ein. |
| InsertTextInRun(String) |
Fügt den angegebenen Text an der aktuellen Position in den Text Run ein. |
| IsInSameDocument(TextPointer) |
Gibt an, ob sich die angegebene Position im selben Textcontainer wie die aktuelle Position befindet. |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| ToString() |
Dieser Typ oder Member unterstützt die Windows Presentation Foundation (WPF)-Infrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code vorgesehen. |