top of page

Modern Text Input in Power Apps: What You Need to Know

If you're building custom forms in Power Apps and want a cleaner, more flexible input experience, you can take advantage of the Modern Text Input control. It's designed to be simpler, more accessible, and more in line with current design standards. While there are some great features to try, there are some buggy tradeoffs that make us not quite ready to completely give up the Classic Text Input.


This post breaks down what matters most—especially for developers skipping the Form control and building a custom form. We'll look at some of the properties that have changed, what the new ones do, and how to handle validation. All in less than 5 minutes.

A Power Apps custom form showing four new inputs and a save button

Classic vs. Modern Property Mapping

Here's a quick table to highlight what's changed:

Modern Property

Classic Equivalent

Notes

Value

Default

Holds a default input value of "". No need to replace "Text input".

Placeholder

HintText

Shows hint text when empty.

Mode

Mode

SingleLine or MultiLine only (no Password--see Type).

Type

(None)

New. Choose "Text", "Password", or "Search"--see Type below.

TriggerOutput

DelayOutput

New. More flexible—see TriggerOutput below.

Required

(None)

New. Marks the input as required.

ValidationState

(Manual styling)

New. Set to "Error" to show a red border.




Note: Values like Type and Align properties are set using text strings (e.g. "Password", "Center")—not Enum syntax like Align.Center.

Type property

This property gives the text input a specific role:

  • "Text" – Default. Accepts any text.

  • "Password" – Masks input with dots. Shows a selectable view input toggle.

  • "Search" – Meant for search bars. Currently, there's no difference from a "Text" type. (However, it may show a search icon or clear button in the future.)

If you're asking for login info or PINs, use Type = "Password". Otherwise, stick with "Text" or "Search".


TriggerOutput property

This one's important if you're doing logic as you type. It controls when OnChange fires and when the control's Value updates:

  • "FocusOut" – Default. Fires when the user leaves the field.

  • "Delayed" – About 500ms after typing stops.

  • "WhileTyping" – Updates as the user types, but throttled.

  • "KeyPress" – Fires on every keystroke (use with caution).

Pro tip: Use "WhileTyping" if you're building responsive custom forms. It's smoother than "KeyPress" and doesn’t trigger on every character. If you're tabbing through inputs, use the "FocusOut".

Required and ValidationState

These two make field validation easier:

  • Required = true – Tags the control as required (mostly informational unless you're using forms).

  • ValidationState = "Error" – Turns the border red. You control this manually.

Here’s a quick example you can include in OnChange or OnSelect of a control:

If(IsBlank(TextInputName.Value)
	UpdateContext({varNameError: true}),
	UpdateContext({varNameError: false})
)

Then bind the property:

ValidationState = If(varNameError, "Error", "None")

Boom—built-in red border.

A modern text input control showing the ValidationState. The text input has a red box around it.

Bonus Tip: Use the Number Input control for Numbers

If you're asking for a number, don’t use a text input. The new Number Input control:

  • Opens the right keyboard on mobile

  • Has increment/decrement buttons (with a customizable Step)

  • Enforces numeric input by default

It’s mostly better all around.


Why We're Not Ready to Give Up the Classic Text Input

While the Modern Text Input is sleek and evolving quickly, it’s not quite feature-complete yet. Here are a few frustrations:

  • There is no "Clear button" (or "Enable spell check") option.

  • The AcceptsFocus property isn’t available, so using SetFocus() can get wonky, especially when paired with TriggerOutput = "WhileTyping". Customizing tab navigation isn't an option.

  • The FontSize property (Size in the Classic Text Input) is too small when you first insert the control, prompting you to adjust it.

  • The OnSelect property is missing, so if you need to do something when a user taps the field, you’ll need a workaround.

Until these gaps are closed, the Classic Text Input still earns its spot in certain custom form scenarios.


Wrap-Up

As with other Modern controls, the Modern Text Input shows true promise, but it isn't quite what we're expecting, yet. They're stylish and clean and have a growing range of options. They can enhance the look and feel of your app, but some things they still can't do.


There's still a place in our toolbox for the Classic Text Input.

Comments


bottom of page