TextPointer Klass
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Representerar en position inom en FlowDocument eller 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
- Arv
Exempel
I följande exempel visas hur du använder en TextPointer för att hitta en position precis inuti det första Run elementet i en angiven textcontainer.
// 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
I följande exempel implementeras en förenklad sökalgoritm med hjälp av TextPointer anläggningar.
// 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
Kommentarer
Klassen TextPointer introducerar följande terminologi:
Position – i sig pekar en TextPointer alltid på en position i innehållet. Sådana positioner hamnar antingen mellan tecken i innehållet eller mellan flödesinnehållselementtaggar som definierar strukturen för innehållet.
Aktuell position – Eftersom en TextPointer alltid indikerar en position, och eftersom många av de åtgärder som kan utföras via en TextPointer är relativa till den position som för närvarande pekas på av TextPointer, är det klokt att helt enkelt referera till den position som anges av en TextPointer som den aktuella positionen.
Infogningsposition – En infogningsposition är en position där nytt innehåll kan läggas till utan att bryta mot några semantiska regler för det associerade innehållet. I praktiken finns en insättningsposition var som helst i innehåll där en caret kan placeras. Ett exempel på en giltig TextPointer position som inte är en infogningsposition är positionen mellan två intilliggande Paragraph taggar (det vill säga mellan den avslutande taggen i föregående stycke och den inledande taggen i nästa stycke).
Symbol – För TextPointer åtgärder som omfattar symboler anses något av följande vara en symbol:
En inledande eller avslutande tagg för ett TextElement element.
Ett UIElement element som finns i en InlineUIContainer eller BlockUIContainer. Observera att en UIElement sådan alltid räknas som exakt en symbol. Eventuella ytterligare innehåll eller element som ingår i UIElement räknas inte som symboler.
Varje 16-bitars Unicode-tecken inuti ett textelement Run .
Textcontainer – en textcontainer är det element som utgör den ultimata kantlinjen för det aktuella flödesinnehållet. positionen som anges av en TextPointer alltid faller inom en textcontainer. För närvarande måste en textcontainer vara antingen en FlowDocument eller en TextBlock. Generellt sett stöds inte åtgärder mellan TextPointer instanser i olika textcontainrar.
Dokument – Innehållet i en textcontainer kallas för ett dokument, som i IsInSameDocument metoden och DocumentStart egenskaperna och DocumentEnd .
Klassen TextPointer är avsedd att underlätta bläddering och manipulering av innehåll som representeras av Windows Presentation Foundation (WPF) flödesinnehållselement. I allmänhet härleds sådana element från TextElement. Några av de åtgärder som TextPointer underlättar omfattar följande:
Utför en ordningsjämförelse av den aktuella positionen med en andra angiven position. CompareTo Se metoden.
Fastställ vilken typ av innehåll som ligger intill den aktuella positionen i en angiven riktning. GetPointerContext Se metoden och TextPointerContext uppräkningen.
Hämta omfången TextElement eller ligger intill den aktuella positionen. Se Paragraph och GetAdjacentElement metoden.
Hämta textcontainern som omfattar det aktuella dokumentet. Se egenskapen Parent .
Hämta ett angivet antal tecken före eller efter den aktuella positionen. GetTextInRun Se metoden.
Infoga en sträng med tecken i den aktuella positionen. InsertTextInRun Se metoden.
Hitta radgränser i innehåll. GetLineStartPosition Se metoden och IsAtLineStartPosition egenskapen.
Översätt mellan TextPointer positioner och symbolförskjutningar till innehåll. GetOffsetToPosition Se metoderna ochGetPositionAtOffset.
Utför visuell träfftestning genom att översätta mellan en TextPointer position och en Point som representerar relativa koordinater.
Hitta en infogningsposition i närheten eller kontrollera om den aktuella positionen är en insättningsposition. GetInsertionPosition Se metoderna och GetNextInsertionPosition och egenskapenIsAtInsertionPosition.
Positionen och LogicalDirection som anges av ett TextPointer objekt är oföränderlig. När innehållet redigeras eller ändras ändras inte den position som anges av en TextPointer i förhållande till den omgivande texten. Snarare justeras förskjutningen av den positionen från början av innehållet på motsvarande sätt för att återspegla den nya relativa positionen i innehållet. Till exempel fortsätter en TextPointer som anger en position i början av ett visst stycke att peka på början av det stycket även när innehållet infogas eller tas bort före eller efter stycket.
Klassen TextPointer tillhandahåller inga offentliga konstruktorer. En instans av TextPointer skapas med hjälp av egenskaper eller metoder för andra objekt (inklusive andra TextPointer objekt). Följande lista innehåller några exempel på metoder och egenskaper som skapar och returnerar en TextPointer. Den här listan är inte fullständig:
Från : TextElementContentStart, ContentEnd, ElementStartoch ElementEnd.
Från en TextBlock (textcontainer): ContentStart, ContentEndoch GetPositionFromPoint.
Från en FlowDocument (textcontainer): ContentStart, och ContentEnd
Från en befintlig TextPointer: DocumentStart, DocumentEnd, GetNextInsertionPositionoch GetPositionAtOffset.
Egenskaper
| Name | Description |
|---|---|
| DocumentEnd |
Hämtar en TextPointer i slutet av innehållet i textcontainern som är associerad med den aktuella positionen. |
| DocumentStart |
Hämtar en TextPointer i början av innehållet i textcontainern som är associerad med den aktuella positionen. |
| HasValidLayout |
Hämtar ett värde som anger om textcontainern som är associerad med den aktuella positionen har en giltig layout (up-to-date). |
| IsAtInsertionPosition |
Hämtar ett värde som anger om den aktuella positionen är en insättningsposition. |
| IsAtLineStartPosition |
Hämtar ett värde som anger om den aktuella positionen är i början av en rad. |
| LogicalDirection |
Hämtar den logiska riktningen som är associerad med den aktuella positionen som används för att skilja innehåll som är associerat med den aktuella positionen. |
| Paragraph |
Hämtar det stycke som omfångsbegränsar den aktuella positionen, om det finns. |
| Parent |
Hämtar den logiska överordnad som omfångsbegränsar den aktuella positionen. |
Metoder
| Name | Description |
|---|---|
| CompareTo(TextPointer) |
Utför en ordningsjämförelse mellan de positioner som anges av den aktuella TextPointer och en andra angiven TextPointer. |
| DeleteTextInRun(Int32) |
Tar bort det angivna antalet tecken från den position som anges av den aktuella TextPointer. |
| Equals(Object) |
Avgör om det angivna objektet är lika med det aktuella objektet. (Ärvd från Object) |
| GetAdjacentElement(LogicalDirection) |
Returnerar det eventuella elementet som kanter den aktuella TextPointer i den angivna logiska riktningen. |
| GetCharacterRect(LogicalDirection) |
Returnerar en avgränsningsruta (Rect) för innehåll som gränsar till den aktuella TextPointer i den angivna logiska riktningen. |
| GetHashCode() |
Fungerar som standard-hash-funktion. (Ärvd från Object) |
| GetInsertionPosition(LogicalDirection) |
Returnerar en TextPointer till närmaste insättningsposition i den angivna logiska riktningen. |
| GetLineStartPosition(Int32, Int32) |
Returnerar en TextPointer till början av en rad som har angetts i förhållande till den aktuella TextPointeroch rapporterar hur många rader som hoppades över. |
| GetLineStartPosition(Int32) |
Returnerar en TextPointer till början av en rad som har angetts i förhållande till den aktuella TextPointer. |
| GetNextContextPosition(LogicalDirection) |
Returnerar en pekare till nästa symbol i den angivna logiska riktningen. |
| GetNextInsertionPosition(LogicalDirection) |
Returnerar en TextPointer till nästa infogningsposition i den angivna logiska riktningen. |
| GetOffsetToPosition(TextPointer) |
Returnerar antalet symboler mellan den aktuella TextPointer och en andra angiven TextPointer. |
| GetPointerContext(LogicalDirection) |
Returnerar en kategoriindikator för innehållet intill den aktuella TextPointer i den angivna logiska riktningen. |
| GetPositionAtOffset(Int32, LogicalDirection) |
Returnerar en TextPointer till den position som anges av den angivna förskjutningen, i symboler, från början av strömmen TextPointer och i den angivna riktningen. |
| GetPositionAtOffset(Int32) |
Returnerar en TextPointer till den position som anges av den angivna förskjutningen, i symboler, från början av den aktuella TextPointer. |
| GetTextInRun(LogicalDirection, Char[], Int32, Int32) |
Kopierar det angivna maximala antalet tecken från valfri intilliggande text i den angivna riktningen till en teckenmatris som tillhandahålls av anroparen. |
| GetTextInRun(LogicalDirection) |
Returnerar en sträng som innehåller text intill den aktuella TextPointer i den angivna logiska riktningen. |
| GetTextRunLength(LogicalDirection) |
Returnerar antalet Unicode-tecken mellan den aktuella TextPointer och nästa icke-textsymbol i den angivna logiska riktningen. |
| GetType() |
Hämtar den aktuella instansen Type . (Ärvd från Object) |
| InsertLineBreak() |
Infogar en radbrytning vid den aktuella positionen. |
| InsertParagraphBreak() |
Infogar en styckebrytning vid den aktuella positionen. |
| InsertTextInRun(String) |
Infogar den angivna texten i texten Run vid den aktuella positionen. |
| IsInSameDocument(TextPointer) |
Anger om den angivna positionen finns i samma textcontainer som den aktuella positionen. |
| MemberwiseClone() |
Skapar en ytlig kopia av den aktuella Object. (Ärvd från Object) |
| ToString() |
Den här typen eller medlemmen stöder infrastrukturen för Windows Presentation Foundation (WPF) och är inte avsedd att användas direkt från koden. |