Install
$ agentstack add skill-davidortinau-maui-skills-maui-accessibility ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
.NET MAUI Accessibility
Critical Platform Gotchas
1. Don't set Description on Label
Setting SemanticProperties.Description on a Label overrides the Text property for screen readers. The label may be read twice or behave unexpectedly.
2. Android Entry/Editor: Description breaks TalkBack actions
On Android, setting SemanticProperties.Description on Entry or Editor causes TalkBack to lose "double tap to edit" action hints.
3. iOS: Description on parent hides children
On iOS/VoiceOver, setting SemanticProperties.Description on a layout makes the entire container a single accessible element — child elements become unreachable.
4. Hint conflicts with Entry.Placeholder on Android
On Android, SemanticProperties.Hint and Entry.Placeholder map to the same Android attribute (contentDescription / hint). Setting both causes one to override the other. Choose one.
5. HeadingLevel platform differences
- Windows (Narrator): Supports all 9 heading levels (
Level1–Level9). - Android (TalkBack) / iOS (VoiceOver): Only distinguish "heading" vs
"not heading". All levels are treated identically.
Use heading levels for semantic correctness — just know the hierarchy only renders on Windows.
Accessibility Checklist
When auditing or retrofitting a page:
- Images: Add
SemanticProperties.Descriptionto meaningful images.
Set AutomationProperties.IsInAccessibleTree="false" on decorative ones.
- Buttons/Controls: Ensure icon-only buttons have
Description.
Text buttons generally don't need it.
- Entries/Editors: Use
Placeholderfor context. AddHintonly if
extra instruction is needed. Avoid Description (Android breakage).
- Labels: Do not add
Description— letTextspeak for itself.
Add HeadingLevel to section headers.
- Headings: Mark page title as
Level1, section titles asLevel2, etc. - Grouping: Avoid
Descriptionon layout containers (iOS breakage).
Use ExcludedWithChildren to hide decorative groups.
- Dynamic content: Call
SemanticScreenReader.Announcefor status
changes. Use SetSemanticFocus after navigation or error display.
- Tab order: Set
TabIndexon interactive controls for logical order. - Test: Run TalkBack (Android), VoiceOver (iOS/Mac), and Narrator
(Windows) to verify reading order and actions.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: davidortinau
- Source: davidortinau/maui-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.