TextPointer Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Rappresenta una posizione all'interno di un FlowDocument o di un 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
- Ereditarietà
Esempio
Nell'esempio seguente viene illustrato come usare un TextPointer per trovare una posizione all'interno del primo elemento Run in un contenitore di testo specificato.
// 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
L'esempio seguente implementa un algoritmo di ricerca semplicistico usando TextPointer strutture.
// 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
Commenti
La classe TextPointer introduce la terminologia seguente:
Posizione: un TextPointer punta sempre a una posizione nel contenuto. Tali posizioni rientrano tra i caratteri nel contenuto o tra i tag degli elementi di contenuto del flusso che definiscono la struttura per il contenuto.
Posizione corrente: poiché un TextPointer indica sempre una posizione e, poiché molte delle operazioni che possono essere eseguite tramite un TextPointer sono relative alla posizione attualmente puntata dal TextPointer, è opportuno fare semplicemente riferimento alla posizione indicata da un TextPointer come posizione corrente .
Posizione di inserimento: una posizione di inserimento è una posizione in cui è possibile aggiungere nuovo contenuto senza interrompere regole semantiche per il contenuto associato. In pratica, una posizione di inserimento è in qualsiasi punto del contenuto in cui è possibile posizionare un cursore. Un esempio di posizione valida TextPointer che non è una posizione di inserimento è la posizione tra due tag Paragraph adiacenti, ovvero tra il tag di chiusura del paragrafo precedente e il tag di apertura del paragrafo successivo.
Simbolo: ai fini delle operazioni di TextPointer che coinvolgono simboli, uno dei seguenti è considerato un simbolo :
Tag di apertura o chiusura per un elemento TextElement.
Elemento UIElement contenuto in un InlineUIContainer o in un BlockUIContainer. Si noti che tale UIElement viene sempre conteggiato come esattamente un simbolo; qualsiasi contenuto o elemento aggiuntivo contenuto dall'UIElement non viene conteggiato come simboli.
Ogni carattere Unicode a 16 bit all'interno di un elemento Run testo.
Contenitore di testo: un contenitore di testo è l'elemento che costituisce il bordo finale per il contenuto del flusso; la posizione indicata da un TextPointer rientra sempre all'interno di un contenitore di testo. Attualmente, un contenitore di testo deve essere un FlowDocument o un TextBlock. In generale, le operazioni tra istanze di TextPointer in contenitori di testo diversi non sono supportate.
Documento: il contenuto in un contenitore di testo viene definito documento , come nel metodo IsInSameDocument e nelle proprietà DocumentStart e DocumentEnd.
La classe TextPointer è progettata per facilitare l'attraversamento e la manipolazione del contenuto rappresentato dagli elementi di contenuto del flusso di Windows Presentation Foundation (WPF); in generale, tali elementi derivano da TextElement. Alcune delle operazioni che TextPointer facilitano includono:
Eseguire un confronto ordinale della posizione corrente con una seconda posizione specificata. Vedere il metodo CompareTo.
Determinare il tipo di contenuto adiacente alla posizione corrente in una direzione specificata. Vedere il metodo GetPointerContext e l'enumerazione TextPointerContext.
Ottiene il TextElement che definisce gli ambiti o è adiacente alla posizione corrente. Vedere Paragraph e il metodo GetAdjacentElement.
Ottiene il contenitore di testo che definisce l'ambito del documento corrente. Vedere la proprietà Parent.
Ottiene un numero specificato di caratteri che precede o segue la posizione corrente. Vedere il metodo GetTextInRun.
Inserire una stringa di caratteri nella posizione corrente. Vedere il metodo InsertTextInRun.
Trovare i limiti di riga nel contenuto. Vedere il metodo GetLineStartPosition e la proprietà IsAtLineStartPosition.
Traduci tra TextPointer posizioni e offset di simboli nel contenuto. Vedere i metodi GetOffsetToPosition e GetPositionAtOffset.
Eseguire hit test visivi tra una posizione TextPointer e una Point che rappresenta le coordinate relative.
Trovare una posizione di inserimento nelle vicinanze o verificare se la posizione corrente è una posizione di inserimento. Vedere i metodi GetInsertionPosition e GetNextInsertionPosition e la proprietà IsAtInsertionPosition.
La posizione e LogicalDirection indicate da un oggetto TextPointer non sono modificabili. Quando il contenuto viene modificato o modificato, la posizione indicata da un TextPointer non cambia rispetto al testo circostante; invece l'offset di tale posizione dall'inizio del contenuto viene regolato in modo corrispondente in modo da riflettere la nuova posizione relativa nel contenuto. Ad esempio, un TextPointer che indica una posizione all'inizio di un determinato paragrafo continua a puntare all'inizio del paragrafo anche quando il contenuto viene inserito o eliminato prima o dopo il paragrafo.
La classe TextPointer non fornisce costruttori pubblici. Un'istanza di TextPointer viene creata utilizzando proprietà o metodi di altri oggetti (inclusi altri oggetti TextPointer). L'elenco seguente fornisce alcuni esempi di metodi e proprietà che creano e restituiscono un TextPointer. Questo elenco non è esaustivo:
Da un TextElement: ContentStart, ContentEnd, ElementStarte ElementEnd.
Da un TextBlock (contenitore di testo): ContentStart, ContentEnde GetPositionFromPoint.
Da un FlowDocument (contenitore di testo): ContentStarte ContentEnd
Da un TextPointeresistente: DocumentStart, DocumentEnd, GetNextInsertionPositione GetPositionAtOffset.
Proprietà
DocumentEnd |
Ottiene un TextPointer alla fine del contenuto nel contenitore di testo associato alla posizione corrente. |
DocumentStart |
Ottiene un TextPointer all'inizio del contenuto nel contenitore di testo associato alla posizione corrente. |
HasValidLayout |
Ottiene un valore che indica se il contenitore di testo associato alla posizione corrente ha un layout valido (up-to-date). |
IsAtInsertionPosition |
Ottiene un valore che indica se la posizione corrente è una posizione di inserimento. |
IsAtLineStartPosition |
Ottiene un valore che indica se la posizione corrente si trova all'inizio di una riga. |
LogicalDirection |
Ottiene la direzione logica associata alla posizione corrente utilizzata per disambiguare il contenuto associato alla posizione corrente. |
Paragraph |
Ottiene il paragrafo che definisce l'ambito della posizione corrente, se presente. |
Parent |
Ottiene l'elemento padre logico che definisce l'ambito della posizione corrente. |
Metodi
CompareTo(TextPointer) |
Esegue un confronto ordinale tra le posizioni specificate dal TextPointer corrente e un secondo TextPointerspecificato. |
DeleteTextInRun(Int32) |
Elimina il numero specificato di caratteri dalla posizione indicata dal TextPointercorrente. |
Equals(Object) |
Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object) |
GetAdjacentElement(LogicalDirection) |
Restituisce l'elemento, se presente, che delimita il TextPointer corrente nella direzione logica specificata. |
GetCharacterRect(LogicalDirection) |
Restituisce un rettangolo di delimitazione (Rect) per il contenuto che delimita il TextPointer corrente nella direzione logica specificata. |
GetHashCode() |
Funge da funzione hash predefinita. (Ereditato da Object) |
GetInsertionPosition(LogicalDirection) |
Restituisce un TextPointer alla posizione di inserimento più vicina nella direzione logica specificata. |
GetLineStartPosition(Int32, Int32) |
Restituisce un TextPointer all'inizio di una riga specificata rispetto alla TextPointercorrente e indica il numero di righe ignorate. |
GetLineStartPosition(Int32) |
Restituisce un TextPointer all'inizio di una riga specificata rispetto al TextPointercorrente. |
GetNextContextPosition(LogicalDirection) |
Restituisce un puntatore al simbolo successivo nella direzione logica specificata. |
GetNextInsertionPosition(LogicalDirection) |
Restituisce un TextPointer alla posizione di inserimento successiva nella direzione logica specificata. |
GetOffsetToPosition(TextPointer) |
Restituisce il numero di simboli tra il TextPointer corrente e un secondo TextPointerspecificato. |
GetPointerContext(LogicalDirection) |
Restituisce un indicatore di categoria per il contenuto adiacente al TextPointer corrente nella direzione logica specificata. |
GetPositionAtOffset(Int32, LogicalDirection) |
Restituisce un TextPointer alla posizione indicata dall'offset specificato, in simboli, dall'inizio del TextPointer corrente e nella direzione specificata. |
GetPositionAtOffset(Int32) |
Restituisce un TextPointer alla posizione indicata dall'offset specificato, in simboli, dall'inizio del TextPointercorrente. |
GetTextInRun(LogicalDirection, Char[], Int32, Int32) |
Copia il numero massimo di caratteri specificato da qualsiasi testo adiacente nella direzione specificata in una matrice di caratteri fornita dal chiamante. |
GetTextInRun(LogicalDirection) |
Restituisce una stringa contenente testo adiacente al TextPointer corrente nella direzione logica specificata. |
GetTextRunLength(LogicalDirection) |
Restituisce il numero di caratteri Unicode tra il TextPointer corrente e il simbolo non di testo successivo, nella direzione logica specificata. |
GetType() |
Ottiene il Type dell'istanza corrente. (Ereditato da Object) |
InsertLineBreak() |
Inserisce un'interruzione di riga nella posizione corrente. |
InsertParagraphBreak() |
Inserisce un'interruzione di paragrafo nella posizione corrente. |
InsertTextInRun(String) |
Inserisce il testo specificato nel testo Run nella posizione corrente. |
IsInSameDocument(TextPointer) |
Indica se la posizione specificata si trova nello stesso contenitore di testo della posizione corrente. |
MemberwiseClone() |
Crea una copia superficiale del Objectcorrente. (Ereditato da Object) |
ToString() |
Questo tipo o membro supporta l'infrastruttura di Windows Presentation Foundation (WPF) e non deve essere usato direttamente dal codice. |