TextPointer Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Představuje pozici uvnitř nebo FlowDocument 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
- Dědičnost
Příklady
Následující příklad ukazuje, jak použít TextPointer k vyhledání pozice přímo uvnitř prvního Run prvku v zadaném textovém kontejneru.
// 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
Následující příklad implementuje zjednodušený algoritmus hledání pomocí TextPointer zařízení.
// 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
Poznámky
Třída TextPointer zavádí následující terminologii:
Pozice – ze své podstaty TextPointer vždy odkazuje na pozici v obsahu. Tyto pozice buď spadají mezi znaky v obsahu, nebo mezi značkami prvků obsahu toku, které definují strukturu obsahu.
Aktuální pozice – Protože vždy označuje pozici, a protože TextPointer mnoho operací, které lze provést prostřednictvím TextPointer , jsou relativní vzhledem k pozici, na kterou aktuálně odkazuje TextPointer, dává smysl jednoduše odkazovat na pozici označenou TextPointer jako aktuální pozici.
Pozice vložení – Pozice vložení je pozice , kde se může přidat nový obsah, aniž by došlo k porušení sémantických pravidel přidruženého obsahu. V praxi je pozice vložení kdekoli v obsahu, kde může být umístěn kurzor. Příkladem platné TextPointer pozice, která není pozice vložení, je pozice mezi dvěma sousedními Paragraph značkami (to znamená mezi pravou značkou předchozího odstavce a levou značkou dalšího odstavce).
Symbol – pro účely TextPointer operací, které zahrnují symboly, se některý z následujících symbolů považuje za symbol:
Levá nebo pravá značka prvku TextElement
Prvek UIElement obsažený uvnitř nebo InlineUIContainer BlockUIContainer. Všimněte si, že takový symbol UIElement se vždy počítá jako přesně jeden symbol; jakýkoli další obsah nebo prvky, které obsahuje, UIElement se nezapočítávají jako symboly.
Každý 16bitový znak Unicode uvnitř textového Run prvku.
Kontejner textu – textový kontejner je prvek, který tvoří konečné ohraničení obsahu toku. pozice označená TextPointer vždy spadá do textového kontejneru. V současné době musí být textový kontejner buď a FlowDocument nebo .TextBlock Obecně řečeno, operace mezi TextPointer instancemi v různých textových kontejnerech se nepodporují.
Dokument – Obsah v textovém kontejneru se označuje jako dokument, jako v IsInSameDocument metodě a vlastnostech DocumentStart DocumentEnd .
Třída TextPointer je určena k usnadnění procházení a manipulace s obsahem, který je reprezentován prvky obsahu toku Windows Presentation Foundation (WPF), obecně, tyto prvky jsou odvozeny od TextElement. Mezi operace, které usnadňují práci, TextPointer patří:
Proveďte pořadové porovnání aktuální pozice s druhou zadanou pozicí. Podívejte se na metodu CompareTo .
Určete typ obsahu sousedícího s aktuální pozicí v zadaném směru. Podívejte se na metodu GetPointerContext a TextPointerContext výčet.
TextElement Získá obory nebo sousedí s aktuální pozicí. Podívejte Paragraph se a metodu GetAdjacentElement .
Získejte textový kontejner, který definuje aktuální dokument. Podívejte se na Parent vlastnost.
Získejte zadaný počet znaků předcházejících aktuální pozici nebo za aktuálním umístěním. Podívejte se na metodu GetTextInRun .
Vloží řetězec znaků na aktuální pozici. Podívejte se na metodu InsertTextInRun .
Vyhledejte hranice čar v obsahu. Podívejte se na metodu GetLineStartPosition a IsAtLineStartPosition vlastnost.
Překládá se mezi TextPointer pozicemi a posuny symbolů do obsahu. Podívejte se na metody GetOffsetToPosition a GetPositionAtOffset metody.
Proveďte testování vizuálních hitů tak, že přeložíte mezi TextPointer pozicí a Point reprezentací relativních souřadnic.
Vyhledejte blízkou pozici vložení nebo zkontrolujte, jestli je aktuální pozice pozice vložení. Podívejte se na metody GetInsertionPosition a IsAtInsertionPosition GetNextInsertionPosition vlastnost.
Pozice a LogicalDirection označená objektem TextPointer je neměnná. Při úpravách nebo úpravách obsahu se pozice označená okolním textem TextPointer nezmění. Posun této pozice od začátku obsahu se upraví odpovídajícím způsobem tak, aby odrážela novou relativní pozici v obsahu. TextPointer Například označuje pozici na začátku daného odstavce i nadále odkazovat na začátek tohoto odstavce, i když je obsah vložen nebo odstraněn před odstavcem nebo za odstavcem.
Třída TextPointer neposkytuje žádné veřejné konstruktory. Instance TextPointer je vytvořena pomocí vlastností nebo metod jiných objektů (včetně jiných TextPointer objektů). Následující seznam obsahuje několik příkladů metod a vlastností, které vytvářejí a vracejí TextPointer. Tento seznam není vyčerpávající:
TextElementZ : ContentStart, ContentEnd, ElementStarta ElementEnd.
Z (textového kontejneru TextBlock ): ContentStart, ContentEnda GetPositionFromPoint.
Z (textového kontejneru FlowDocument ): ContentStarta ContentEnd
Z existujícího TextPointer: DocumentStart, DocumentEnd, GetNextInsertionPositiona GetPositionAtOffset.
Vlastnosti
DocumentEnd |
TextPointer Získá na konci obsahu v textovém kontejneru přidruženém k aktuální pozici. |
DocumentStart |
TextPointer Získá na začátku obsahu v textovém kontejneru přidruženém k aktuální pozici. |
HasValidLayout |
Získá hodnotu, která označuje, zda textový kontejner přidružený k aktuální pozici má platné (aktuální) rozložení. |
IsAtInsertionPosition |
Získá hodnotu, která označuje, zda aktuální pozice je pozice vložení. |
IsAtLineStartPosition |
Získá hodnotu, která označuje, zda aktuální pozice je na začátku řádku. |
LogicalDirection |
Získá logický směr přidružený k aktuální pozici, která slouží k zrušení nejednoznačnosti obsahu přidruženého k aktuální pozici. |
Paragraph |
Získá odstavec, který definuje aktuální pozici, pokud existuje. |
Parent |
Získá logický nadřazený objekt, který definuje aktuální pozici. |
Metody
CompareTo(TextPointer) |
Provede pořadové porovnání mezi pozicemi určenými aktuálním TextPointer a druhým zadaným TextPointer. |
DeleteTextInRun(Int32) |
Odstraní zadaný počet znaků z pozice označené aktuálním TextPointer. |
Equals(Object) |
Určí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
GetAdjacentElement(LogicalDirection) |
Vrátí prvek, pokud existuje, že ohraničení aktuálního proudu TextPointer v zadaném logickém směru. |
GetCharacterRect(LogicalDirection) |
Vrátí ohraničující rámeček (Rect) pro obsah, který ohraničení aktuálního stavu TextPointer v zadaném logickém směru. |
GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
GetInsertionPosition(LogicalDirection) |
TextPointer Vrátí hodnotu k nejbližší pozici vložení v zadaném logickém směru. |
GetLineStartPosition(Int32) |
TextPointer Vrátí na začátek řádku zadaného vzhledem k aktuálnímu TextPointer. |
GetLineStartPosition(Int32, Int32) |
TextPointer Vrátí na začátek řádku zadaného vzhledem k aktuálnímu TextPointerřádku a hlásí, kolik řádků bylo přeskočeno. |
GetNextContextPosition(LogicalDirection) |
Vrátí ukazatel na další symbol v zadaném logickém směru. |
GetNextInsertionPosition(LogicalDirection) |
TextPointer Vrátí hodnotu na další pozici vložení v zadaném logickém směru. |
GetOffsetToPosition(TextPointer) |
Vrátí počet symbolů mezi aktuálním TextPointer a druhým zadaným TextPointersymbolem . |
GetPointerContext(LogicalDirection) |
Vrátí indikátor kategorie pro obsah sousedící s aktuálním TextPointer v zadaném logickém směru. |
GetPositionAtOffset(Int32) |
TextPointer Vrátí hodnotu na pozici označenou zadaným posunem v symbolech od začátku aktuálního TextPointerbodu . |
GetPositionAtOffset(Int32, LogicalDirection) |
TextPointer Vrátí hodnotu na pozici označenou zadaným posunem v symbolech od začátku proudu TextPointer a v zadaném směru. |
GetTextInRun(LogicalDirection) |
Vrátí řetězec obsahující libovolný text sousedící s aktuálním TextPointer textem v zadaném logickém směru. |
GetTextInRun(LogicalDirection, Char[], Int32, Int32) |
Zkopíruje zadaný maximální počet znaků z libovolného sousedního textu v zadaném směru do pole znaků zadaného volajícím. |
GetTextRunLength(LogicalDirection) |
Vrátí počet znaků Unicode mezi aktuálním TextPointer a dalším netextovým symbolem v zadaném logickém směru. |
GetType() |
Type Získá aktuální instanci. (Zděděno od Object) |
InsertLineBreak() |
Vloží konec řádku na aktuální pozici. |
InsertParagraphBreak() |
Vloží konec odstavce na aktuální pozici. |
InsertTextInRun(String) |
Vloží zadaný text do textu Run na aktuální pozici. |
IsInSameDocument(TextPointer) |
Určuje, zda je zadaná pozice ve stejném textovém kontejneru jako aktuální pozice. |
MemberwiseClone() |
Vytvoří použádnou kopii aktuálního souboru Object. (Zděděno od Object) |
ToString() |
Tento typ nebo člen podporuje infrastrukturu Windows Presentation Foundation (WPF) a není určena k použití přímo z vašeho kódu. |