ValuePattern.ValuePatternInformation.IsReadOnly Property

 
System_CAPS_noteNote

The .NET API Reference documentation has a new home. Visit the .NET API Browser on docs.microsoft.com to see the new experience.

Gets a value that specifies whether the value of a UI Automation element is read-only.

Namespace:   System.Windows.Automation
Assembly:  UIAutomationClient (in UIAutomationClient.dll)

public bool IsReadOnly { get; }

Property Value

Type: System.Boolean

true if the value is read-only; false if it can be modified.

A control should have its IsEnabledProperty set to true and its IsReadOnlyProperty set to false before the client attempts a call to SetValue.

In the following example, an AutomationElement that supports the ValuePatterncontrol pattern has its ValueProperty set to a user-specified value.

///--------------------------------------------------------------------
/// <summary>
/// Inserts a string into a text control that supports ValuePattern.
/// </summary>
/// <param name="targetControl">A text control.</param>
/// <param name="value">The string to be inserted.</param>
///--------------------------------------------------------------------
private void InsertText(AutomationElement targetControl,
                                    string value)
{
    // Validate arguments / initial setup
    if (value == null)
        throw new ArgumentNullException(
            "String parameter must not be null.");

    if (targetControl == null)
        throw new ArgumentNullException(
            "AutomationElement parameter must not be null");

    // A series of basic checks prior to attempting an insertion.
    //
    // Check #1: Is control enabled?
    // An alternative to testing for static or read-only controls 
    // is to filter using 
    // PropertyCondition(AutomationElement.IsEnabledProperty, true) 
    // and exclude all read-only text controls from the collection.
    if (!targetControl.Current.IsEnabled)
    {
        throw new InvalidOperationException(
            "The control is not enabled.\n\n");
    }

    // Check #2: Are there styles that prohibit us 
    //           from sending text to this control?
    if (!targetControl.Current.IsKeyboardFocusable)
    {
        throw new InvalidOperationException(
            "The control is not focusable.\n\n");
    }

    // Once you have an instance of an AutomationElement,  
    // check if it supports the ValuePattern pattern.
    object valuePattern = null;

    if (!targetControl.TryGetCurrentPattern(
        ValuePattern.Pattern, out valuePattern))
    {
        // Elements that support TextPattern 
        // do not support ValuePattern and TextPattern
        // does not support setting the text of 
        // multi-line edit or document controls.
        // For this reason, text input must be simulated.
    }
    // Control supports the ValuePattern pattern so we can 
    // use the SetValue method to insert content.
    else
    {
        if (((ValuePattern)valuePattern).Current.IsReadOnly)
        {
            throw new InvalidOperationException(
                "The control is read-only.");
        }
        else
        {
            ((ValuePattern)valuePattern).SetValue(value);
        }
    }
}

.NET Framework
Available since 3.0
Return to top
Show: