TextPointer Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Reprezentuje pozycję w FlowDocument lub 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
- Dziedziczenie
Przykłady
W poniższym przykładzie pokazano, jak za pomocą TextPointer znaleźć pozycję tuż wewnątrz pierwszego elementu Run w określonym kontenerze tekstowym.
// 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
Poniższy przykład implementuje uproszczony algorytm znajdowania przy użyciu TextPointer obiektów.
// 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
Uwagi
Klasa TextPointer wprowadza następującą terminologię:
Pozycja — z założenia TextPointer zawsze wskazuje pozycję w zawartości. Takie pozycje dzielą się między znakami w zawartości lub między tagami elementów zawartości przepływu definiujących strukturę zawartości.
Bieżąca pozycja — ponieważ TextPointer zawsze wskazuje pozycję i dlatego, że wiele operacji, które można wykonać za pomocą TextPointer, jest względem pozycji aktualnie wskazywanej przez TextPointer, warto po prostu odwoływać się do pozycji wskazanej przez TextPointer jako bieżącej pozycji.
Pozycja wstawiania — pozycja wstawiania to pozycja, w której można dodać nową zawartość bez przerywania żadnych reguł semantycznych dla skojarzonej zawartości. W praktyce pozycja wstawiania znajduje się w dowolnym miejscu, w którym daszek może być umieszczony. Przykładem prawidłowej TextPointer pozycji, która nie jest pozycją wstawiania, jest położenie między dwoma sąsiednimi tagami Paragraph (czyli między tagiem zamykającym poprzedniego akapitu a tagiem otwierającym następnego akapitu).
Symbol — do celów operacji TextPointer, które obejmują symbole, każdy z następujących elementów jest uważany za symbol :
Tag otwierający lub zamykający dla elementu TextElement.
Element UIElement zawarty w InlineUIContainer lub BlockUIContainer. Należy pamiętać, że taki UIElement jest zawsze liczone jako dokładnie jeden symbol; żadna dodatkowa zawartość lub elementy zawarte w UIElement nie są liczone jako symbole.
Każdy 16-bitowy znak Unicode wewnątrz elementu Run tekstu.
Kontener tekstu — kontener tekstowy jest elementem, który stanowi ostateczne obramowanie zawartości przepływu; pozycja wskazywana przez TextPointer zawsze mieści się w kontenerze tekstowym. Obecnie kontener tekstowy musi być FlowDocument lub TextBlock. Mówiąc ogólnie, operacje między wystąpieniami TextPointer w różnych kontenerach tekstu nie są obsługiwane.
Document — zawartość w kontenerze tekstowym jest określana jako dokument, jak w metodzie IsInSameDocument oraz właściwościach DocumentStart i DocumentEnd.
Klasa TextPointer ma na celu ułatwienie przechodzenia i manipulowania zawartością reprezentowaną przez elementy zawartości przepływu programu Windows Presentation Foundation (WPF); ogólnie rzecz biorąc, takie elementy pochodzą z TextElement. Niektóre operacje, które TextPointer ułatwiają wykonywanie następujących czynności:
Wykonaj porządkowe porównanie bieżącej pozycji z drugą określoną pozycją. Zobacz metodę CompareTo.
Określ typ zawartości sąsiadującej z bieżącym położeniem w określonym kierunku. Zobacz metodę GetPointerContext i wyliczenie TextPointerContext.
Pobierz TextElement zakresów lub sąsiadujących z bieżącym położeniem. Zobacz Paragraph i metodę GetAdjacentElement.
Pobierz kontener tekstowy, który określa zakres bieżącego dokumentu. Zobacz właściwość Parent.
Pobierz określoną liczbę znaków poprzedzających lub po bieżącej pozycji. Zobacz metodę GetTextInRun.
Wstaw ciąg znaków w bieżącej pozycji. Zobacz metodę InsertTextInRun.
Znajdź granice wierszy w zawartości. Zobacz metodę GetLineStartPosition i właściwość IsAtLineStartPosition.
Przetłumacz między TextPointer położeniami i przesunięciami symboli na zawartość. Zobacz metody GetOffsetToPosition i GetPositionAtOffset.
Przeprowadź testowanie trafień wizualnych, tłumacząc między położeniem TextPointer a Point reprezentującymi współrzędne względne.
Znajdź położenie wstawiania w pobliżu lub sprawdź, czy bieżące położenie jest pozycją wstawiania. Zobacz metody GetInsertionPosition i GetNextInsertionPosition oraz właściwość IsAtInsertionPosition.
Położenie i LogicalDirection wskazywane przez obiekt TextPointer są niezmienne. Gdy zawartość jest edytowana lub modyfikowana, pozycja wskazywana przez TextPointer nie zmienia się względem otaczającego tekstu; przesunięcie tej pozycji od początku zawartości jest dostosowywane odpowiednio w celu odzwierciedlenia nowej pozycji względnej w zawartości. Na przykład TextPointer wskazująca położenie na początku danego akapitu nadal wskazuje początek tego akapitu, nawet jeśli zawartość jest wstawiana lub usuwana przed akapitem lub po nim.
Klasa TextPointer nie udostępnia żadnych publicznych konstruktorów. Wystąpienie TextPointer jest tworzone przy użyciu właściwości lub metod innych obiektów (w tym innych obiektów TextPointer). Poniższa lista zawiera kilka przykładów metod i właściwości, które tworzą i zwracają TextPointer. Ta lista nie jest wyczerpująca:
Z TextElement: ContentStart, ContentEnd, ElementStarti ElementEnd.
Z TextBlock (kontener tekstu): ContentStart, ContentEndi GetPositionFromPoint.
Z FlowDocument (kontenera tekstu): ContentStarti ContentEnd
Z istniejącego TextPointer: DocumentStart, DocumentEnd, GetNextInsertionPositioni GetPositionAtOffset.
Właściwości
DocumentEnd |
Pobiera TextPointer na końcu zawartości w kontenerze tekstowym skojarzonym z bieżącym położeniem. |
DocumentStart |
Pobiera TextPointer na początku zawartości w kontenerze tekstowym skojarzonym z bieżącym położeniem. |
HasValidLayout |
Pobiera wartość wskazującą, czy kontener tekstowy skojarzony z bieżącym położeniem ma prawidłowy układ (up-to-date). |
IsAtInsertionPosition |
Pobiera wartość wskazującą, czy bieżąca pozycja jest pozycją wstawiania. |
IsAtLineStartPosition |
Pobiera wartość wskazującą, czy bieżąca pozycja znajduje się na początku wiersza. |
LogicalDirection |
Pobiera kierunek logiczny skojarzony z bieżącym położeniem, który służy do uściślania zawartości skojarzonej z bieżącym położeniem. |
Paragraph |
Pobiera akapit, który określa zakres bieżącej pozycji, jeśli istnieje. |
Parent |
Pobiera element nadrzędny logiczny, który określa zakres bieżącej pozycji. |
Metody
CompareTo(TextPointer) |
Wykonuje porównanie porządkowe między pozycjami określonymi przez bieżącą TextPointer a drugą określoną TextPointer. |
DeleteTextInRun(Int32) |
Usuwa określoną liczbę znaków z pozycji wskazanej przez bieżący TextPointer. |
Equals(Object) |
Określa, czy określony obiekt jest równy bieżącemu obiektowi. (Odziedziczone po Object) |
GetAdjacentElement(LogicalDirection) |
Zwraca element , jeśli istnieje, który obramuje bieżące TextPointer w określonym kierunku logicznym. |
GetCharacterRect(LogicalDirection) |
Zwraca pole ograniczenia (Rect) dla zawartości obramowania bieżącej TextPointer w określonym kierunku logicznym. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetInsertionPosition(LogicalDirection) |
Zwraca TextPointer do najbliższej pozycji wstawiania w określonym kierunku logicznym. |
GetLineStartPosition(Int32, Int32) |
Zwraca TextPointer na początku wiersza określonego względem bieżącego TextPointeri zgłasza liczbę pominiętych wierszy. |
GetLineStartPosition(Int32) |
Zwraca TextPointer na początku wiersza określonego względem bieżącego TextPointer. |
GetNextContextPosition(LogicalDirection) |
Zwraca wskaźnik do następnego symbolu w określonym kierunku logicznym. |
GetNextInsertionPosition(LogicalDirection) |
Zwraca TextPointer do następnego położenia wstawiania w określonym kierunku logicznym. |
GetOffsetToPosition(TextPointer) |
Zwraca liczbę symboli między bieżącą TextPointer a drugą określoną TextPointer. |
GetPointerContext(LogicalDirection) |
Zwraca wskaźnik kategorii dla zawartości sąsiadującej z bieżącymi TextPointer w określonym kierunku logicznym. |
GetPositionAtOffset(Int32, LogicalDirection) |
Zwraca TextPointer do pozycji wskazanej przez określone przesunięcie w symbolach od początku bieżącej TextPointer i w określonym kierunku. |
GetPositionAtOffset(Int32) |
Zwraca TextPointer do pozycji wskazanej przez określone przesunięcie w symbolach od początku bieżącego TextPointer. |
GetTextInRun(LogicalDirection, Char[], Int32, Int32) |
Kopiuje określoną maksymalną liczbę znaków z dowolnego sąsiedniego tekstu w określonym kierunku do tablicy znaków dostarczonej przez obiekt wywołujący. |
GetTextInRun(LogicalDirection) |
Zwraca ciąg zawierający dowolny tekst przylegający do bieżącej TextPointer w określonym kierunku logicznym. |
GetTextRunLength(LogicalDirection) |
Zwraca liczbę znaków Unicode między bieżącym TextPointer a następnym symbolem innym niż tekst w określonym kierunku logicznym. |
GetType() |
Pobiera Type bieżącego wystąpienia. (Odziedziczone po Object) |
InsertLineBreak() |
Wstawia podział wiersza w bieżącej pozycji. |
InsertParagraphBreak() |
Wstawia podział akapitu w bieżącej pozycji. |
InsertTextInRun(String) |
Wstawia określony tekst do Run tekstu w bieżącym położeniu. |
IsInSameDocument(TextPointer) |
Wskazuje, czy określona pozycja znajduje się w tym samym kontenerze tekstowym co bieżąca pozycja. |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Object. (Odziedziczone po Object) |
ToString() |
Ten typ lub element członkowski obsługuje infrastrukturę programu Windows Presentation Foundation (WPF) i nie jest przeznaczony do użycia bezpośrednio z kodu. |