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 v rámci FlowDocument nebo 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 pomocí TextPointer najít pozici přímo uvnitř prvního Run elementu 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 obsahu. Tyto pozice buď spadají mezi znaky v obsahu, nebo mezi značkami prvku obsahu toku, které definují strukturu obsahu.
Aktuální pozice – protože TextPointer vždy označuje pozici, a protože 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, ve které může být přidán 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 je možné umístit kurzor. Příkladem platné pozice TextPointer, která není pozice vložení, je pozice mezi dvěma sousedními značkami Paragraph (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 považuje za symbol :
Levá nebo pravá značka pro prvek TextElement.
Prvek UIElement obsažený v InlineUIContainer nebo BlockUIContainer. Všimněte si, že takový UIElement se vždy počítá jako přesně jeden symbol; žádný další obsah nebo prvky obsažené v UIElement se nezapočítávají jako symboly.
Každý 16bitový znak Unicode uvnitř textového Run elementu.
Kontejner textu – kontejner textu je prvek, který tvoří konečný okraj obsahu toku. pozice označená TextPointer vždy spadá do textového kontejneru. V současné době musí být textový kontejner buď FlowDocument, nebo TextBlock. Obecně řečeno, operace mezi TextPointer instancemi v různých textových kontejnerech se nepodporují.
Document – Obsah v textovém kontejneru se označuje jako dokument, stejně jako v IsInSameDocument metoda a DocumentStart a DocumentEnd vlastnosti.
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). tyto prvky jsou obecně odvozeny z TextElement. Mezi operace, které TextPointer usnadňují, patří:
Proveďte ř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ýčtu.
Získejte TextElement, které rozsahy nebo sousedí s aktuální pozicí. Viz Paragraph a metodu GetAdjacentElement.
Získejte textový kontejner s oborem aktuálního dokumentu. Podívejte se na vlastnost Parent.
Získá 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.
Vyhledání hranic čar v obsahu Podívejte se na metodu GetLineStartPosition a vlastnost IsAtLineStartPosition.
Přeloží mezi TextPointer pozicemi a posuny symbolů do obsahu. Podívejte se na metody GetOffsetToPosition a GetPositionAtOffset.
Proveďte testování vizuálních přístupů tak, že přeložíte umístění TextPointer a Point představující relativní souřadnice.
Vyhledejte nejbližší pozici vložení nebo zkontrolujte, jestli je aktuální pozice pozice vložení. Prohlédněte si metody GetInsertionPosition a GetNextInsertionPosition a vlastnost IsAtInsertionPosition.
Pozice a LogicalDirection označené objektem TextPointer jsou neměnné. Při úpravě nebo úpravě obsahu se pozice označená TextPointer nezmění vzhledem k okolnímu textu; místo toho se posun této pozice od začátku obsahu upraví odpovídajícím způsobem tak, aby odrážela novou relativní pozici v obsahu. Například TextPointer, která označuje pozici na začátku daného odstavce, pokračuje odkazem na začátek 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í:
Z TextElement: ContentStart, ContentEnd, ElementStarta ElementEnd.
Z TextBlock (textového kontejneru): ContentStart, ContentEnda GetPositionFromPoint.
Z FlowDocument (textového kontejneru): ContentStarta ContentEnd
Z existujícího TextPointer: DocumentStart, DocumentEnd, GetNextInsertionPositiona GetPositionAtOffset.
Vlastnosti
DocumentEnd |
Získá TextPointer na konci obsahu v textovém kontejneru přidruženém k aktuální pozici. |
DocumentStart |
Získá TextPointer na začátku obsahu v textovém kontejneru přidruženém k aktuální pozici. |
HasValidLayout |
Získá hodnotu, která určuje, zda textový kontejner přidružený k aktuální pozici má platné (up-to-date) rozložení. |
IsAtInsertionPosition |
Získá hodnotu, která určuje, zda je aktuální pozice pozice vložení. |
IsAtLineStartPosition |
Získá hodnotu, která určuje, zda je aktuální pozice na začátku řádku. |
LogicalDirection |
Získá logický směr přidružený k aktuální pozici, která slouží k nejednoznačnosti obsahu přidruženého k aktuální pozici. |
Paragraph |
Získá odstavec, který určuje aktuální pozici, pokud existuje. |
Parent |
Získá logický nadřazený objekt, který definuje aktuální pozici. |
Metody
CompareTo(TextPointer) |
Provede ř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 určené aktuálním TextPointer. |
Equals(Object) |
Určuje, zda je zadaný objekt roven aktuálnímu objektu. (Zděděno od Object) |
GetAdjacentElement(LogicalDirection) |
Vrátí prvek, pokud existuje, že ohraničení aktuální 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í TextPointer v zadaném logickém směru. |
GetHashCode() |
Slouží jako výchozí funkce hash. (Zděděno od Object) |
GetInsertionPosition(LogicalDirection) |
Vrátí TextPointer na nejbližší pozici vložení v zadaném logickém směru. |
GetLineStartPosition(Int32, Int32) |
Vrátí TextPointer na začátek řádku zadaného vzhledem k aktuálnímu TextPointera hlásí, kolik řádků bylo vynecháno. |
GetLineStartPosition(Int32) |
Vrátí TextPointer na začátek řádku zadaného vzhledem k aktuálnímu TextPointer. |
GetNextContextPosition(LogicalDirection) |
Vrátí ukazatel na další symbol v zadaném logickém směru. |
GetNextInsertionPosition(LogicalDirection) |
Vrátí TextPointer 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 TextPointer. |
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, LogicalDirection) |
Vrátí TextPointer na pozici označenou zadaným posunem v symbolech od začátku aktuálního TextPointer a v zadaném směru. |
GetPositionAtOffset(Int32) |
Vrátí TextPointer na pozici označenou zadaným posunem v symbolech od začátku aktuálního TextPointer. |
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ých volajícím. |
GetTextInRun(LogicalDirection) |
Vrátí řetězec obsahující libovolný text sousedící s aktuálním TextPointer v zadaném logickém směru. |
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() |
Získá Type aktuální instance. (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 textového 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ří mělkou kopii aktuálního 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. |