diff --git a/change/react-native-windows-4acbe4b2-89e0-4adb-b6b1-9e9bbf4a6220.json b/change/react-native-windows-4acbe4b2-89e0-4adb-b6b1-9e9bbf4a6220.json new file mode 100644 index 00000000000..bfa96624efb --- /dev/null +++ b/change/react-native-windows-4acbe4b2-89e0-4adb-b6b1-9e9bbf4a6220.json @@ -0,0 +1,7 @@ +{ + "type": "prerelease", + "comment": "Defer UIA accessibility provider initialization until requested", + "packageName": "react-native-windows", + "email": "198982749+Copilot@users.noreply.github.com", + "dependentChangeType": "patch" +} \ No newline at end of file diff --git a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp index b40c83eabe7..9f0deabc480 100644 --- a/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +++ b/vnext/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp @@ -2,6 +2,7 @@ #include "CompositionDynamicAutomationProvider.h" #include #include +#include #include #include #include @@ -30,19 +31,6 @@ CompositionDynamicAutomationProvider::CompositionDynamicAutomationProvider( if (props->accessibilityState.has_value() && props->accessibilityState->selected.has_value()) { AddSelectionItemsToContainer(this); } - - if (strongView.try_as() || - strongView.try_as()) { - m_textProvider = winrt::make( - strongView.as(), this) - .try_as(); - } - - if (strongView.try_as()) { - m_annotationProvider = winrt::make( - strongView.as(), this) - .try_as(); - } } CompositionDynamicAutomationProvider::CompositionDynamicAutomationProvider( @@ -282,16 +270,31 @@ HRESULT __stdcall CompositionDynamicAutomationProvider::GetPatternProvider(PATTE if (patternId == UIA_TextPatternId && (strongView.try_as() || strongView.try_as())) { + if (!m_textProvider) { + m_textProvider = winrt::make( + strongView.as(), this) + .try_as(); + } m_textProvider.as().copy_to(pRetVal); } if (patternId == UIA_TextPattern2Id && strongView.try_as()) { + if (!m_textProvider) { + m_textProvider = winrt::make( + strongView.as(), this) + .try_as(); + } m_textProvider.as().copy_to(pRetVal); } if (patternId == UIA_AnnotationPatternId && strongView.try_as() && accessibilityAnnotationHasValue(props->accessibilityAnnotation)) { + if (!m_annotationProvider) { + m_annotationProvider = winrt::make( + strongView.as(), this) + .try_as(); + } m_annotationProvider.as().copy_to(pRetVal); }