If you’ve ever found yourself copying and pasting the same header, footer, or navigation menu across multiple screens in a Power Apps canvas app, you’re not alone. This repetitive work not only slows down development but also creates a maintenance nightmare when you need to update styling or functionality. The solution? Canvas App Components.
In this post, I’ll walk you through what components are, why they’re essential for scalable app development, and how to build your first reusable component from scratch.
What Are Canvas App Components?
A canvas component is a reusable bundle of controls, logic, and styling that behaves like a custom control you can insert on multiple screens. Think of it as a template that you design once, and all instances throughout your app (or even across multiple apps) share the same definition.
The real power comes from custom properties—you can expose input and output properties that make components configurable rather than static. For example, a header component might accept a PageTitle input property, allowing each screen to display a different title while maintaining consistent branding and layout.
Why Use Components?
Single Source of Truth
Update your component once, and every screen using it reflects the change immediately. No more hunting through dozens of screens to fix a logo, update a color scheme, or adjust navigation logic.
Faster Development
New screens that previously took hours to build now take minutes. Insert your pre-built header and footer components, configure their properties, and you’re done.
Consistency Across Apps
Using Component Libraries, you can publish components and reuse them across multiple apps, ensuring organization-wide branding and user experience standards.
Better Collaboration
Teams can build and maintain component libraries centrally, allowing makers across your organization to leverage proven, tested UI patterns.
Real-World Use Cases
Use Case 1: Dynamic Header with Page Titles
Build a header component that displays your app name, logo, and a dynamic page title that changes based on the active screen. Each screen sets its own title via a custom input property, ensuring users always know where they are in the app.
Use Case 2: Navigation Footer
Create a footer component with Back and Home navigation buttons plus a real-time date/time display. The footer maintains consistent navigation across all screens while supporting optional screen-specific buttons (like a “New Task” button that only appears on your Task List screen).
Use Case 3: Reusable Form Controls
Build custom input components (text boxes with validation, date pickers with formatting, dropdown menus with standardized styling) that can be dropped into any form throughout your app. This ensures data entry consistency and reduces repetitive property configuration.
Use Case 4: Navigation Menus
Design a side navigation or top menu component that handles all screen navigation from a single table or collection. Update your menu structure in one place, and all screens reflect the new navigation instantly.
How to Build Your First Component: A Step-by-Step Guide
Let’s build a reusable header component with a dynamic page title. If you don’t have a development environment yet, check out my guide on setting up your own Power Platform Developer Instance to get started.
Step 1: Create a New Component
- Open your canvas app in Power Apps Studio
- Navigate to Tree view → Components (in the left navigation)
- Click + New component
- Rename your component to something meaningful, like
HeaderComponent - Set the component’s Height property to
80(or your desired pixel height) - Set the Width property to
App.Widthto make it responsive
Step 2: Design Your Header Layout
- Add a Rectangle control to serve as the background
- Set its Fill property to your brand color (e.g.,
RGBA(0, 120, 212, 1)) - Add a Label control for your app name
- Set Text to your app name (e.g.,
"Task Management") - Set Color to
White - Set Font size and weight appropriately
- Set Text to your app name (e.g.,
- Add another Label for the dynamic page title
- We’ll configure this in the next step
- Optionally add an Image control for your company logo
Step 3: Create a Custom Input Property
This is where the magic happens—we’ll create a property that allows each screen to pass in its own page title.
- With your component selected, go to the Properties pane on the right
- Scroll to Custom properties and click + New custom property
- Configure the property:
- Display name:
Page Title - Property name:
PageTitle(no spaces) - Property type: Input
- Data type:
Text
- Display name:
- Click Create
Step 4: Bind the Property to Your Label
- Select the page title label inside your component
- Set its Text property to:
HeaderComponent.PageTitle
This binds the label to whatever value is passed into the PageTitle property.
Step 5: Use Your Component on Screens
- Navigate to a screen in your app
- Go to Insert → Custom (or Get more components if using a library)
- Select your
HeaderComponent - The component will be inserted at the top of your screen
- With the component instance selected, set the PageTitle property in the right-hand pane:
- For your Home screen:
"Home" - For your Tasks screen:
"My Tasks" - For your Settings screen:
"Settings"
- For your Home screen:
Step 6: Make It Dynamic with Variables (Optional)
For even more flexibility, use a variable that changes based on the active screen:
- On each screen’s OnVisible property, set a global variable:
- Home screen:
Set(varPageTitle, "Home") - Tasks screen:
Set(varPageTitle, "My Tasks") - Settings screen:
Set(varPageTitle, "Settings")
- Home screen:
- On the header component instance (on any screen), set the PageTitle property to:
varPageTitle
Now the header title updates automatically whenever a user navigates to a new screen.
Advanced Patterns: Navigation Components
When building navigation components (like a footer with Back and Home buttons), you’ll need to handle a common limitation: components cannot directly reference screens by name.
The Solution: Screen Data Type Properties
- Create a custom input property with Data type: Screen
- On your navigation button inside the component, use:
Navigate(FooterComponent.HomeScreen, ScreenTransition.Fade)
On each screen where you use the footer, pass in the screen reference:
HomeScreen = 'Home Screen'
(Note: Single quotes are used for screen names with spaces)
This pattern allows your component to navigate to any screen without being hardcoded to specific screen names.
Tips for Component Success
- Keep components focused: Each component should do one thing well. Don’t try to build a single “mega-component” that handles everything
- Design responsively: Always use App.Width and relative positioning so components work across devices
- Document your properties: Use clear property names and provide documentation for team members who will use your components
- Test thoroughly: Verify components work on multiple screens and with different property values before rolling out
- Consider component libraries: If you’re building multiple apps, publish shared components to a component library for organization-wide reuse
Conditional Visibility: Screen-Specific Elements
One common question: “Can I show a button on only one screen while hiding it on others?”
Absolutely! Use a Boolean input property to control visibility:
- Create a custom input property:
ExtraButtonVisible(Boolean) - Set the button’s Visible property to:
FooterComponent.ExtraButtonVisible
- On most screens, set
ExtraButtonVisible = false - On screens that need the button (like a Task List screen), set
ExtraButtonVisible = true
This pattern gives you maximum flexibility while maintaining a single reusable component.
Next Steps
Now that you understand components, try building these common patterns:
- A header component with dynamic titles (as demonstrated above)
- A footer component with navigation and date/time display
- A custom input control with validation logic
- A navigation menu component driven by a data table
Components are one of the most powerful features in Power Apps for building scalable, maintainable applications. Once you start using them, you’ll wonder how you ever built apps without them!
About the Author
Josh Kility is a Power Platform consultant specializing in Dynamics 365 and canvas app development. Connect with Josh on LinkedIn to discuss Power Platform development and best practices.
Related Articles
Have questions about canvas components or want to share your own component patterns? Leave a comment below or connect with me on LinkedIn!
