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 obiekcie 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ą elementu TextPointer znaleźć pozycję tuż wewnątrz pierwszego Run elementu 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 zawsze TextPointer 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.
Pozycja bieżąca — ponieważ TextPointer zawsze wskazuje pozycję, a ponieważ wiele operacji, które można wykonać za pomocą TextPointer elementu, jest względem pozycji aktualnie wskazywanej przez TextPointerelement , warto po prostu odwoływać się do pozycji wskazanej przez TextPointerpozycję jako bieżącą pozycję.
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 zawartości, w której daszek może być umieszczony. Przykładem prawidłowej TextPointer pozycji, która nie jest pozycją wstawiania, jest pozycja między dwoma sąsiednimi Paragraph tagami (czyli między tagiem zamykającym poprzedniego akapitu a tagiem otwierającym następnego akapitu).
Symbol — do celów TextPointer operacji, które obejmują symbole, którykolwiek z poniższych jest uważany za symbol:
Tag otwierający lub zamykający TextElement dla elementu.
Element UIElement zawarty w elemecie InlineUIContainer lub BlockUIContainer. Należy pamiętać, że taki element UIElement jest zawsze liczone jako dokładnie jeden symbol. Każda dodatkowa zawartość lub elementy zawarte w obiekcie UIElement nie są liczone jako symbole.
Każdy 16-bitowy znak Unicode wewnątrz elementu tekstowego Run .
Kontener tekstu — kontener tekstowy jest elementem, który stanowi ostateczne obramowanie zawartości przepływu; pozycja wskazywana TextPointer przez element zawsze mieści się w kontenerze tekstowym. Obecnie kontener tekstowy musi być kontenerem FlowDocumentTextBlocklub . Mówiąc ogólnie, operacje między wystąpieniami TextPointer w różnych kontenerach tekstowych nie są obsługiwane.
Document — zawartość w kontenerze tekstowym jest określana jako dokument, jak w metodzie IsInSameDocument i 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 Windows Presentation Foundation (WPF), a 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 porównanie porządkowe bieżącej pozycji z drugą określoną pozycją. Zobacz metodę CompareTo .
Określ typ zawartości sąsiadującej z bieżącą pozycją w określonym kierunku. Zobacz metodę GetPointerContext i TextPointerContext wyliczenie.
TextElement Pobierz zakresy lub sąsiaduje z bieżącym położeniem. Zobacz Paragraph i GetAdjacentElement metoda .
Pobierz kontener tekstowy, który określa zakres bieżącego dokumentu. Parent Zobacz właściwość .
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 IsAtLineStartPosition właściwość .
Przetłumacz między pozycjami TextPointer i przesunięciami symboli na zawartość. Zobacz metody GetOffsetToPosition i GetPositionAtOffset .
Przeprowadź testowanie trafień wizualnych, tłumacząc położenie TextPointer i Point reprezentując 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 IsAtInsertionPosition właściwość .
Pozycja i LogicalDirection wskazywana przez TextPointer obiekt są niezmienne. Gdy zawartość jest edytowana lub modyfikowana, pozycja wskazywana przez element 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 element TextPointer wskazujący położenie na początku danego akapitu nadal wskazuje początek tego akapitu nawet wtedy, gdy zawartość jest wstawiana lub usuwana przed akapitem lub po nim.
Klasa TextPointer nie udostępnia żadnych publicznych konstruktorów. Wystąpienie klasy TextPointer jest tworzone przy użyciu właściwości lub metod innych obiektów (w tym innych TextPointer obiektów). Poniższa lista zawiera kilka przykładów metod i właściwości, które tworzą i zwracają element TextPointer. Ta lista nie jest wyczerpująca:
Z elementu TextElement: ContentStart, , ElementStartContentEndi ElementEnd.
Z kontenera tekstowego TextBlock : ContentStart, ContentEndi GetPositionFromPoint.
Z kontenera tekstowego FlowDocument : ContentStart, i ContentEnd
Z istniejącego TextPointerelementu : DocumentStart, , DocumentEndGetNextInsertionPositioni GetPositionAtOffset.
Właściwości
DocumentEnd |
Pobiera element TextPointer na końcu zawartości w kontenerze tekstowym skojarzonym z bieżącym położeniem. |
DocumentStart |
Pobiera element 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 (aktualny) układ. |
IsAtInsertionPosition |
Pobiera wartość wskazującą, czy bieżące położenie 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óre 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żącego położenia, jeśli istnieje. |
Parent |
Pobiera element nadrzędny logiczny, który określa zakres bieżącego położenia. |
Metody
CompareTo(TextPointer) |
Wykonuje porównanie porządkowe między pozycjami określonymi przez bieżącą TextPointer a drugą określoną wartością TextPointer. |
DeleteTextInRun(Int32) |
Usuwa określoną liczbę znaków z pozycji wskazanej przez bieżący TextPointerelement . |
Equals(Object) |
Określa, czy dany obiekt jest taki sam, jak bieżący obiekt. (Odziedziczone po Object) |
GetAdjacentElement(LogicalDirection) |
Zwraca element , jeśli istnieje, który obramuje bieżący TextPointer w określonym kierunku logicznym. |
GetCharacterRect(LogicalDirection) |
Zwraca pole ograniczenia (Rect) dla zawartości, która obramuje bieżący TextPointer w określonym kierunku logicznym. |
GetHashCode() |
Służy jako domyślna funkcja skrótu. (Odziedziczone po Object) |
GetInsertionPosition(LogicalDirection) |
Zwraca wartość do TextPointer najbliższej pozycji wstawiania w określonym kierunku logicznym. |
GetLineStartPosition(Int32) |
Zwraca wartość na TextPointer początku wiersza określonego względem bieżącego TextPointerelementu . |
GetLineStartPosition(Int32, Int32) |
Zwraca wartość na TextPointer początku wiersza, który jest określony względem bieżącego TextPointerelementu , i zgłasza, ile wierszy zostało pominiętych. |
GetNextContextPosition(LogicalDirection) |
Zwraca wskaźnik do następnego symbolu w określonym kierunku logicznym. |
GetNextInsertionPosition(LogicalDirection) |
Zwraca wartość a 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ą wartością TextPointer. |
GetPointerContext(LogicalDirection) |
Zwraca wskaźnik kategorii dla zawartości sąsiadującej z prądem TextPointer w określonym kierunku logicznym. |
GetPositionAtOffset(Int32) |
Zwraca wartość typu TextPointer do pozycji wskazanej przez określone przesunięcie w symbolach od początku bieżącego TextPointerelementu . |
GetPositionAtOffset(Int32, LogicalDirection) |
Zwraca wartość typu TextPointer do pozycji wskazanej przez określone przesunięcie w symbolach od początku bieżącego TextPointer i w określonym kierunku. |
GetTextInRun(LogicalDirection) |
Zwraca ciąg zawierający dowolny tekst przylegający do bieżącego TextPointer w określonym kierunku logicznym. |
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. |
GetTextRunLength(LogicalDirection) |
Zwraca liczbę znaków Unicode między bieżącym TextPointer i następnym symbolem innym niż tekst w określonym kierunku logicznym. |
GetType() |
Type Pobiera wartość 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 tekstu Run w bieżącej pozycji. |
IsInSameDocument(TextPointer) |
Wskazuje, czy określona pozycja znajduje się w tym samym kontenerze tekstowym co bieżące położenie. |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Ten typ lub element członkowski obsługuje infrastrukturę Windows Presentation Foundation (WPF) i nie jest przeznaczony do użycia bezpośrednio z kodu. |