Obter detalhes de atributos de texto misto usando a automação da interface do usuário
Nota
Esta documentação destina-se a desenvolvedores do .NET Framework que desejam usar as classes de automação da interface do usuário gerenciadas definidas no System.Windows.Automation namespace. Para obter as informações mais recentes sobre a automação da interface do usuário, consulte API de automação do Windows: automação da interface do usuário.
Este tópico mostra como usar a Automação da Interface do Usuário da Microsoft para obter detalhes de atributos de texto de um intervalo de texto que abrange vários valores de atributo. Um intervalo de texto pode corresponder à localização atual do cursor (ou seleção degenerada) dentro de um documento, uma seleção contígua de texto, uma coleção de seleções de texto separadas ou todo o conteúdo textual de um documento.
Exemplo
O exemplo de código a seguir demonstra como obter o FontNameAttribute de um intervalo de texto onde GetAttributeValue retorna um MixedAttributeValue objeto.
///--------------------------------------------------------------------
/// <summary>
/// Display the target selection with attribute details in client.
/// </summary>
/// <param name="selectedText">The current target selection.</param>
///--------------------------------------------------------------------
private void DisplaySelectedTextWithAttributes(string selectedText)
{
targetSelection.Text = selectedText;
// We're only interested in the FontNameAttribute for the purposes
// of this sample.
targetSelectionAttributes.Text =
ParseTextRangeByAttribute(
selectedText, TextPattern.FontNameAttribute);
}
///--------------------------------------------------------------------
/// <summary>
/// Parse the target selection based on the text attribute of interest.
/// </summary>
/// <param name="selectedText">The current target selection.</param>
/// <param name="automationTextAttribute">
/// The text attribute of interest.
/// </param>
/// <returns>
/// A string representing the requested attribute details.
/// </returns>
///--------------------------------------------------------------------
private string ParseTextRangeByAttribute(
string selectedText,
AutomationTextAttribute automationTextAttribute)
{
StringBuilder attributeDetails = new StringBuilder();
// Initialize the current attribute value.
string attributeValue = "";
// Make a copy of the text range.
TextPatternRange searchRangeClone = searchRange.Clone();
// Collapse the range to the starting endpoint.
searchRangeClone.Move(TextUnit.Character, -1);
// Iterate through the range character by character.
for (int x = 1; x <= selectedText.Length; x++)
{
searchRangeClone.Move(TextUnit.Character, 1);
// Get the attribute value of the current character.
string newAttributeValue =
searchRangeClone.GetAttributeValue(automationTextAttribute).ToString();
// If the new attribute value is not equal to the old then report
// the new value along with its location within the range.
if (newAttributeValue != attributeValue)
{
attributeDetails.Append(automationTextAttribute.ProgrammaticName)
.Append(":\n<")
.Append(newAttributeValue)
.Append("> at text range position ")
.AppendLine(x.ToString());
attributeValue = newAttributeValue;
}
}
return attributeDetails.ToString();
}
'--------------------------------------------------------------------
' Display the target selection with attribute details in client.
' <param name="selectedText">The current target selection.</param>
'--------------------------------------------------------------------
Private Sub DisplaySelectedTextWithAttributes(ByVal selectedText As String)
targetSelection.Text = selectedText
' We're only interested in the FontNameAttribute for the purposes
' of this sample.
targetSelectionAttributes.Text = _
ParseTextRangeByAttribute( _
selectedText, TextPattern.FontNameAttribute)
End Sub
'--------------------------------------------------------------------
' Parse the target selection based on the text attribute of interest.
' <param name="selectedText">The current target selection.</param>
' <param name="automationTextAttribute">
' The text attribute of interest.
' A string representing the requested attribute details.
'--------------------------------------------------------------------
Function ParseTextRangeByAttribute( _
ByVal selectedText As String, _
ByVal automationTextAttribute As AutomationTextAttribute) As String
Dim attributeDetails As StringBuilder = New StringBuilder()
' Initialize the current attribute value.
Dim attributeValue As String = ""
' Make a copy of the text range.
Dim searchRangeClone As TextPatternRange = searchRange.Clone()
' Collapse the range to the starting endpoint.
searchRangeClone.Move(TextUnit.Character, -1)
' Iterate through the range character by character.
Dim x As Integer
For x = 1 To selectedText.Length
searchRangeClone.Move(TextUnit.Character, 1)
' Get the attribute value of the current character.
Dim newAttributeValue As String = _
searchRangeClone.GetAttributeValue(automationTextAttribute).ToString()
' If the new attribute value is not equal to the old then report
' the new value along with its location within the range.
If (newAttributeValue <> attributeValue) Then
attributeDetails.Append(automationTextAttribute.ProgrammaticName) _
.Append(":") _
.Append(vbLf) _
.Append("<") _
.Append(newAttributeValue) _
.Append("> at text range position ") _
.AppendLine(x.ToString())
attributeValue = newAttributeValue
End If
Next
Return attributeDetails.ToString()
End Function
O TextPattern padrão de controle, em conjunto com a TextPatternRange classe, oferece suporte a atributos, propriedades e métodos básicos de texto. Para funcionalidade específica de controle que não é suportada por TextPattern ou TextPatternRange, a AutomationElement classe fornece métodos para um cliente de automação da interface do usuário acessar o modelo de objeto nativo correspondente.
Consulte também
- Visão geral do TextPattern de automação da interface do usuário
- Adicionar conteúdo a uma caixa de texto usando a automação da interface do usuário
- Localizar e realçar texto usando a automação da interface do usuário
- Visão geral dos padrões de controle de automação da interface do usuário
- Padrões de controle de automação da interface do usuário para clientes
- Obter atributos de texto usando a automação da interface do usuário