TextPointer 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
表示 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
- 繼承
範例
下列範例示範如何使用 TextPointer 來尋找位於指定文字容器中第一 Run 個元素內的位置。
// 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
下列範例會實作使用 TextPointer 設施的簡單尋找演算法。
// 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
備註
類別 TextPointer 介紹下列術語:
Position - 本質上,一 TextPointer 律指向內容中 的位置 。 這類位置會落在內容中的字元之間,或在定義內容結構的流程內容元素標記之間。
目前位置 - 因為 一 TextPointer 律會指出位置,而且因為可以透過 TextPointer 執行的許多作業都相對於 目前所指向 TextPointer 的位置,所以只要將 所 TextPointer 指示的位置參照為 目前位置,就很合理。
插入 位置 - 插入位置 是可新增內容的位置,而不會中斷相關聯內容的任何語意規則。 實際上,插入位置是在內容中可放置插入號的位置。 不是插入位置的有效 TextPointer 位置範例是兩個相鄰 Paragraph 標籤 (之間的位置,也就是前一個段落的結束記號與下一個段落的開頭標記) 。
符號 - 針對涉及符號的 TextPointer 作業用途,下列任何一項都會被視為 符號:
專案的開頭或結束記號 TextElement 。
UIElement或 BlockUIContainer 內含的專案 InlineUIContainer 。 請注意,這類 UIElement 一律會計算為完全相同的一個符號;所包含的 UIElement 任何其他內容或元素不會算為符號。
文字 Run 元素內的每 16 位 Unicode 字元。
文字 容器 - 文字容器 是構成手邊流程內容最終框線的專案;由 TextPointer 所指示的位置一律落在文字容器內。 目前,文字容器必須是 FlowDocument 或 TextBlock 。 一般而言,不支援不同文字容器中的實例之間的 TextPointer 作業。
檔 - 文字容器中的內容稱為檔,如同 方法和 DocumentStart 和 DocumentEnd 屬性一樣 IsInSameDocument 。
類別 TextPointer 旨在協助周遊和操作由 WPF Windows Presentation Foundation () 流程內容元素所代表的內容,一般而言,這類元素衍生自 TextElement 。 可協助的一些作業 TextPointer 包括下列各項:
執行目前位置與第二個指定位置的序數比較。 CompareTo請參閱 方法。
決定與指定方向目前位置連續的內容類型。 GetPointerContext請參閱 方法和 TextPointerContext 列舉。
TextElement取得範圍或與目前位置連續的 。 請參閱 Paragraph 和 GetAdjacentElement 方法。
取得範圍目前檔的文字容器。 請參閱 Parent 屬性。
取得目前位置之前或之後的指定字元數。 GetTextInRun請參閱 方法。
在目前的位置插入字元字串。 InsertTextInRun請參閱 方法。
在內容中尋找線條界限。 GetLineStartPosition請參閱 方法和 IsAtLineStartPosition 屬性。
將位置和符號位移之間 TextPointer 轉譯為內容。 GetOffsetToPosition請參閱 和 GetPositionAtOffset 方法。
藉由在位置與 Point 代表相對座標之間 TextPointer 翻譯,以執行視覺點擊測試。
尋找附近的插入位置,或檢查目前位置是否為插入位置。 GetInsertionPosition請參閱 和 GetNextInsertionPosition 方法和 IsAtInsertionPosition 屬性。
物件所指出 TextPointer 的位置和 LogicalDirection 是固定的。 編輯或修改內容時,所 TextPointer 指示的位置不會變更相對於周圍文字;而是會對應地調整該位置與內容開頭的位移,以反映內容中的新相對位置。 例如, TextPointer ,表示指定段落開頭的位置會繼續指向該段落的開頭,即使內容是在段落之前或之後插入或刪除時也一直指向該段落的開頭。
類別 TextPointer 不提供任何公用建構函式。 的 TextPointer 實例是使用其他物件的屬性或方法所建立, (包括其他 TextPointer 物件) 。 下列清單提供一些建立和傳回 TextPointer 的方法和屬性範例。 這份清單並不詳盡:
TextElement從 : ContentStart 、 ContentEnd 、 ElementStart 和 ElementEnd 。
TextBlock從 (文字容器) : ContentStart 、 ContentEnd 和 GetPositionFromPoint 。
FlowDocument從 (文字容器) : ContentStart 、 和ContentEnd
從現有的 TextPointer : DocumentStart 、 DocumentEndGetNextInsertionPosition 、 和 GetPositionAtOffset 。
屬性
DocumentEnd |
在與目前位置相關的文字容器中的內容結尾處取得 TextPointer。 |
DocumentStart |
在與目前位置相關的文字容器中的內容開頭處取得 TextPointer。 |
HasValidLayout |
取得值,這個值表示與目前位置相關的文字容器是否具備有效的 (最新) 配置。 |
IsAtInsertionPosition |
取得值,這個值表示目前位置是否為插入位置。 |
IsAtLineStartPosition |
取得值,這個值表示目前位置是否位於字行開頭。 |
LogicalDirection |
取得與目前位置相關的邏輯方向,這個邏輯方向用來釐清與目前位置相關的內容。 |
Paragraph |
取得涵蓋目前位置的段落 (如果有的話)。 |
Parent |
取得涵蓋目前位置的邏輯父代。 |