Skip to content

Conversation

@SuthiYuvaraj
Copy link
Contributor

Issue Description:

VoiceOver does not read the ComboBox State correctly, In the sample, the ComboBox behavior is implemented using SfTextInputLayout with a Picker. However, I have already implemented the semantic properties for picker , it was overriden by SfTextInputLayout, the expectation is for VoiceOver to recognise and announce it as a ComboBox state.

Description of change :

Update SemanticProperties using property changed on IsOpen property in picker to achieve the expected output.

Note:
net9.0 PR - dotnet/maui-samples#651

Issues Fixed

Fixes #30899

Tested the behaviour in the following platforms

  • Android
  • Windows
  • iOS
  • Mac

@dotnet-policy-service dotnet-policy-service bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Oct 30, 2025
{
if (value)
{
SemanticScreenReader.Announce("State Expanded");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The current announcements "State Expanded" and "State Collapsed" lack context about what was expanded/collapsed.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @jsuarezruiz,I’ve updated the SemanticScreenReader with the responsible category. Please review the changes and let me know if you have any feedback or concerns.

{
if (value)
{
SemanticScreenReader.Announce("State Expanded");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hard-coded English strings "State Expanded" won't be localized for non-English users. Could include localized resources?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jsuarezruiz, I checked through the MAUI project templates, and it looks like all existing uses of SemanticProperties and SemanticScreenReader use English text directly, without localisation resources. I’ve followed that same approach here to stay consistent with the current template pattern.

@jsuarezruiz jsuarezruiz added the t/a11y Relates to accessibility label Oct 30, 2025
@sheiksyedm sheiksyedm added area-templates Project templates, Item Templates for Blazor and MAUI a11y/sf-template-app labels Oct 30, 2025
@SuthiYuvaraj SuthiYuvaraj marked this pull request as ready for review October 30, 2025 10:12
Copilot AI review requested due to automatic review settings October 30, 2025 10:12
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR improves accessibility for Picker controls in the MAUI mobile template by implementing dynamic screen reader announcements for picker state changes. Instead of using static semantic properties, the changes track picker expansion state through bound properties and announce state changes programmatically.

Key changes:

  • Replaced static SemanticProperties attributes with programmatic SemanticScreenReader.Announce calls
  • Added IsOpen bindings to Picker controls to track their expanded/collapsed state
  • Implemented property change handlers to announce picker state changes to screen readers

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.

File Description
TaskDetailPage.xaml Updated Project picker with consolidated semantic description and IsOpen binding; removed redundant semantic properties
ProjectDetailPage.xaml Updated Category picker with consolidated semantic description and IsOpen binding; removed redundant semantic properties
TaskDetailPageModel.cs Added IsProjectPickerExpanded property and OnIsProjectPickerExpandedChanged handler to announce picker state changes
ProjectDetailPageModel.cs Added IsCategoryPickerExpanded property and OnIsCategoryPickerExpandedChanged handler to announce picker state changes

OnPropertyChanged(nameof(HasCompletedTasks));
}

partial void OnIsCategoryPickerExpandedChanged(bool value)
Copy link

Copilot AI Oct 30, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Extra space between 'void' and 'OnIsCategoryPickerExpandedChanged'. Should be single space for consistency with the similar method in TaskDetailPageModel.cs.

Copilot uses AI. Check for mistakes.
@jsuarezruiz
Copy link
Contributor

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

{
if (value)
{
SemanticScreenReader.Announce("Project ComboBox, State Expanded");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should/could be a localized text?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

a11y/sf-template-app area-templates Project templates, Item Templates for Blazor and MAUI partner/syncfusion Issues / PR's with Syncfusion collaboration t/a11y Relates to accessibility

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Voice over is not announcing role as combo box and state as collapsed for "Project" combobox:A11y_.NET maui_user can creat a tak_Screen reader

3 participants