diff --git a/src/System.Windows.Forms/src/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObject.cs b/src/System.Windows.Forms/src/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObject.cs
index c65c6f79841..a47d3f85cab 100644
--- a/src/System.Windows.Forms/src/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObject.cs
+++ b/src/System.Windows.Forms/src/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObject.cs
@@ -17,9 +17,14 @@ internal class DataGridViewTextBoxEditingControlAccessibleObject : Control.Contr
/// The parent is changed when the editing control is attached to another editing cell.
///
private AccessibleObject? _parentAccessibleObject;
+ private readonly TextBoxBase _owningDataGridViewTextBoxEditingControl;
+ private readonly TextBoxBaseUiaTextProvider _textProvider;
public DataGridViewTextBoxEditingControlAccessibleObject(DataGridViewTextBoxEditingControl ownerControl) : base(ownerControl)
{
+ _owningDataGridViewTextBoxEditingControl = ownerControl;
+ _textProvider = new TextBoxBaseUiaTextProvider(ownerControl);
+ UseTextProviders(_textProvider, _textProvider);
}
public override AccessibleObject? Parent => _parentAccessibleObject;
@@ -47,7 +52,9 @@ internal override UiaCore.IRawElementProviderFragmentRoot? FragmentRoot
{
UiaCore.UIA.ControlTypePropertyId => UiaCore.UIA.EditControlTypeId,
UiaCore.UIA.NamePropertyId => Name,
- UiaCore.UIA.IsValuePatternAvailablePropertyId => true,
+ UiaCore.UIA.IsTextPatternAvailablePropertyId => IsPatternSupported(UiaCore.UIA.TextPatternId),
+ UiaCore.UIA.IsTextPattern2AvailablePropertyId => IsPatternSupported(UiaCore.UIA.TextPattern2Id),
+ UiaCore.UIA.IsValuePatternAvailablePropertyId => IsPatternSupported(UiaCore.UIA.ValuePatternId),
_ => base.GetPropertyValue(propertyID),
};
@@ -55,9 +62,13 @@ internal override bool IsPatternSupported(UiaCore.UIA patternId)
=> patternId switch
{
UiaCore.UIA.ValuePatternId => true,
+ UiaCore.UIA.TextPatternId => true,
+ UiaCore.UIA.TextPattern2Id => true,
_ => base.IsPatternSupported(patternId)
};
+ internal override bool IsReadOnly => _owningDataGridViewTextBoxEditingControl.ReadOnly;
+
///
/// Sets the parent accessible object for the node which can be added or removed to/from hierachy nodes.
///
diff --git a/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObjectTests.cs b/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObjectTests.cs
new file mode 100644
index 00000000000..762334cc9be
--- /dev/null
+++ b/src/System.Windows.Forms/tests/UnitTests/System/Windows/Forms/DataGridViewTextBoxEditingControl.DataGridViewTextBoxEditingControlAccessibleObjectTests.cs
@@ -0,0 +1,61 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using Xunit;
+using static System.Windows.Forms.DataGridViewTextBoxEditingControl;
+using static Interop;
+
+namespace System.Windows.Forms.Tests
+{
+ public class DataGridViewTextBoxEditingControl_DataGridViewTextBoxEditingControlAccessibleObjectTests : IClassFixture
+ {
+ [WinFormsFact]
+ public void DataGridViewTextBoxEditingControlAccessibleObject_Ctor_Default()
+ {
+ using DataGridViewTextBoxEditingControl textCellControl = new DataGridViewTextBoxEditingControl();
+ DataGridViewTextBoxEditingControlAccessibleObject accessibleObject = new DataGridViewTextBoxEditingControlAccessibleObject(textCellControl);
+ Assert.Equal(textCellControl, accessibleObject.Owner);
+ }
+
+ [WinFormsFact]
+ public void DataGridViewTextBoxEditingControlAccessibleObject_Ctor_ThrowsException_IfOwnerIsNull()
+ {
+ using DataGridViewTextBoxEditingControl textCellControl = new DataGridViewTextBoxEditingControl();
+ Assert.Throws(() => new DataGridViewTextBoxEditingControlAccessibleObject(null));
+ }
+
+ [WinFormsTheory]
+ [InlineData(true)]
+ [InlineData(false)]
+ public void ToolStripTextBoxControlAccessibleObject_IsReadOnly_IsExpected(bool readOnly)
+ {
+ using DataGridViewTextBoxEditingControl textCellControl = new DataGridViewTextBoxEditingControl();
+ textCellControl.ReadOnly = readOnly;
+ AccessibleObject accessibleObject = textCellControl.AccessibilityObject;
+ Assert.Equal(readOnly, accessibleObject.IsReadOnly);
+ }
+
+ [WinFormsTheory]
+ [InlineData((int)UiaCore.UIA.IsTextPatternAvailablePropertyId)]
+ [InlineData((int)UiaCore.UIA.IsTextPattern2AvailablePropertyId)]
+ [InlineData((int)UiaCore.UIA.IsValuePatternAvailablePropertyId)]
+ public void ToolStripTextBoxControlAccessibleObject_GetPropertyValue_PatternsSuported(int propertyID)
+ {
+ using DataGridViewTextBoxEditingControl textCellControl = new DataGridViewTextBoxEditingControl();
+ AccessibleObject accessibleObject = textCellControl.AccessibilityObject;
+ Assert.True((bool)accessibleObject.GetPropertyValue((UiaCore.UIA)propertyID));
+ }
+
+ [WinFormsTheory]
+ [InlineData((int)UiaCore.UIA.ValuePatternId)]
+ [InlineData((int)UiaCore.UIA.TextPatternId)]
+ [InlineData((int)UiaCore.UIA.TextPattern2Id)]
+ public void ToolStripTextBoxControlAccessibleObject_IsPatternSupported_PatternsSuported(int patternId)
+ {
+ using DataGridViewTextBoxEditingControl textCellControl = new DataGridViewTextBoxEditingControl();
+ AccessibleObject accessibleObject = textCellControl.AccessibilityObject;
+ Assert.True(accessibleObject.IsPatternSupported((UiaCore.UIA)patternId));
+ }
+ }
+}