Skip to main content

How to Make Screen Readers Announce a Message in Power Apps

· 5 min read
Jagdish Kumawat
Founder @ Dewiride

A screen reader reads where the user is. When an action makes a message appear somewhere else, its users don't hear about it. A live region fixes that: screen readers announce whenever its text changes. In Power Apps, a classic Label becomes a live region with its Live property.

The Rules​

Microsoft's article Announce dynamic changes with live regions sets them out:

  • Only a Label control can be a live region. That's the classic Label; the modern Text control has no Live property.
  • Live is Off, Polite or Assertive. Polite waits until the screen reader finishes speaking; Assertive interrupts.
  • When the text changes, the whole text is announced. An empty text, "", announces nothing.
  • Keep the label's Visible set to true, and don't change Live, because some screen readers miss live regions that appear, disappear or switch on later.

Prerequisites​

  • A message that appears after an action. The example is the question the Career Development Plan app asks before removing a competency (Part 9).

Step 1: Insert a Classic Label​

In the Insert pane, search for Text label and choose it under Classic. In the example, it went into the screen's body container, after the Save and Remove buttons, where the question belongs. Its defaults were Text "Text", Live Live.Off, AutoHeight false, Font Font.'Open Sans', Size 13 and PaddingLeft 5.

Step 2: Make It a Live Region​

PropertyValue
LiveLive.Polite
Visibletrue (leave it)

The question isn't urgent, so Polite lets the screen reader finish what it's saying first.

Step 3: Change the Text, Not the Visibility​

The label shows the question when it's needed and nothing otherwise:

lblConfirmCS → Text
If(
locConfirmRemove,
"Remove " & locCompetency.Competency & " from the plan for " & locJobTitle & "? People with this job title won't see it in their plan anymore. Their responses are kept.",
""
)

The Remove button sets locConfirmRemove to true, so the text changes, and the change is announced. With AutoHeight on, the empty label takes almost no room (How to Ask for Confirmation Before an Action).

To match the screen's modern controls, I also set:

PropertyValue
AutoHeighttrue
FontApp.Theme.Font
Size12
FontWeightFontWeight.Semibold
PaddingLeft0

At Size 15, the question looked bigger than the modern text around it, which is also set to 15, so I lowered it to 12.

The Result​

After selecting Remove:

The Edit competency screen with Save and Remove, then the question Remove Negotiation from the plan for Head of Sales? People with this job title won't see it in their plan anymore. Their responses are kept., then Yes, remove and Cancel

In the running app's page, the label carried aria-live="polite", the web's live region attribute that screen readers watch.

Why Not Move the Focus Instead?​

Moving keyboard focus to the question would also make a screen reader read it. But Microsoft's SetFocus function reference says it can't set the focus to controls inside a Container control, and every control in the example's screens sits in a container. A live region works there.

Common Mistakes​

MistakeWhat happensDo this instead
Using the modern Text controlThere's no Live propertyUse the classic Label
Showing and hiding the labelSome screen readers miss the changeKeep it visible and change its Text
Assertive for routine messagesScreen readers are interruptedUse Polite unless it's urgent

Troubleshooting​

SymptomLikely causeFix
The same message isn't announced twiceThe text didn't changeSet it to "", then to the message again
Nothing is announcedLive is OffSet Live
The empty label leaves a gapAutoHeight is offTurn AutoHeight on

FAQ​

Can a modern Text control be a live region?​

No. Microsoft's accessibility properties reference lists Live as available only in the Label control, so use the classic Label for messages that must be announced.

Where should the live region go?​

Where its message makes sense when read in order. Microsoft's article says users can reach a live region with normal navigation too, not only when it changes.

Conclusion​

Use a classic Label with Live set to Polite, keep it visible, and change its Text when there's something to say. Screen readers announce it, wherever the user is.

Additional Resources​

Stay Updated

Subscribe to our newsletter for the latest tutorials, tech insights, and developer news.

By subscribing, you agree to our privacy policy. Unsubscribe at any time.