Skip to content

Name feed tree items, so screen readers stop reading the class name - #49

Merged
kellylford merged 2 commits into
mainfrom
fix/tree-item-names
Oct 22, 2026
Merged

kellylford merged 2 commits into
mainfrom
fix/tree-item-names

Conversation

@kellylford

Copy link
Copy Markdown
Collaborator

Every feed and folder in the feed tree was announced as "RSSReaderWPF.FeedItem". Found while recording the RSS Quick audio tour: NVDA 2026.2, with the 1.4.0 build installed from the Microsoft Store in the test VM, said it for every row. vmtest's UI Automation report showed the same name.

Cause: the tree's item containers never had AutomationProperties.Name, so UI Automation named each TreeViewItem by its header. The header is the FeedItem, whose ToString is the class name. The headlines list already bound the name; the tree didn't.

Fix

  • MainWindow.xaml: the TreeViewItem container style binds AutomationProperties.Name to Title.
  • FeedItem and ArticleItem override ToString to return the title. This covers rows with no container, such as those a virtualized list has scrolled away (from the code review).
  • AccessibleNameTests: reads the names of tree items, a nested child and headlines through the tree's and list's own automation peers, which is the route a screen reader takes, and checks the ToString fallback.
  • CLAUDE.md records the rule (the second time this has happened, after FolderChoice), and CHANGELOG has an Unreleased entry.

macOS and iOS name their rows from the visible text, so they don't have this class of bug, and there's no parity change.

🤖 Generated with Claude Code

kellylford and others added 2 commits October 22, 2026 00:05
The feed tree's items had no accessible name, so UI Automation fell back to
FeedItem.ToString and NVDA read "RSSReaderWPF.FeedItem" for every feed and
folder. The item style now binds the name to the title, as the headlines list
already did, and AccessibleNameTests checks both through their automation peers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s as a screen reader reads them

From the review: rows without a container, such as those a virtualized list has
scrolled away, are still named by ToString. The tests now read names through the
tree's and list's own automation children. CLAUDE.md records the rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kellylford
kellylford enabled auto-merge (squash) October 22, 2026 05:16
@kellylford
kellylford merged commit ad67ee5 into main Oct 22, 2026
5 checks passed
@kellylford
kellylford deleted the fix/tree-item-names branch October 22, 2026 05:18
@kellylford kellylford mentioned this pull request Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant