{"id":1659,"date":"2019-02-26T10:08:00","date_gmt":"2019-02-26T18:08:00","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/powerapps-ten-reusable-components\/"},"modified":"2025-06-11T08:05:05","modified_gmt":"2025-06-11T15:05:05","slug":"powerapps-ten-reusable-components","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/powerapps-ten-reusable-components\/","title":{"rendered":"10 Reusable Components: tab control, calendar, dialog box, map control and more"},"content":{"rendered":"<p>This blog post will present a set of custom controls built using the new PowerApps component feature for Canvas apps.<\/p>\n<p>As a prerequisite, check out <a href=\"https:\/\/powerapps.microsoft.com\/blog\/components-available-in-preview\/\" rel=\"noopener\" target=\"_blank\">Yifie Wang&#8217;s blog post introducing the PowerApps components feature<\/a> and <a href=\"https:\/\/powerapps.microsoft.com\/blog\/components-start-your-journey-with-reusable-controls\/\" rel=\"noopener\" target=\"_blank\">Brian Dang&#8217;s &#8220;start your journey with components&#8221; blog post<\/a> that includes instructions on importing\/exporting components and more.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"450\" alt=\"Control Samples\" class=\"alignnone size-large wp-image-1815\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png\"\/><\/p>\n<p>Before we delve into individual components, I would like to share 2 guiding principles we used as much as possible when building these controls.<\/p>\n<p>1) A reusable control should offer a degree of customization and flexibility so that consumers of the controls do not need to delve into the component&#8217;s internal implementation in order to meet their requirements.<\/p>\n<p>2) The interface of the control should remain simple and clean. By interface here, I mean the input and output parameters of the components.\u00a0 One has to carefully consider which input parameters are worth exposing. There is a balance between providing a flexible controls and over bloating the control with too many parameters (Interface bloat).<\/p>\n<p>To follow these 2 principles, we used a simple strategy where exposed only important input parameters and used a generic Styles property (a value-pair collection) to include more refined style related parameters that are useful for those who wants to further change the look and feel of the control.<\/p>\n<p>You can download the demo app package\u00a0<a href=\"https:\/\/aka.ms\/pa-controls-demo\"><span style=\"text-decoration: underline;\">here<\/span> <\/a>and the individual components <a href=\"https:\/\/github.com\/Microsoft\/powerapps-tools\/tree\/master\/Components\">here<\/a>.<\/p>\n<p>Special Thanks to <a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/author\/demora\/\">Denise Moran<\/a> for her contribution to this v1 iteration.<strong> You too<\/strong> can be a contributor. Head over to the PowerApps tools <a href=\"https:\/\/github.com\/Microsoft\/powerapps-tools\">github<\/a> and join the community in adding your own components.<\/p>\n<p>Here is an overview of the components:<\/p>\n<h3><strong>Map Control<\/strong><\/h3>\n<p>Static Bing Map component. Allow you to render static map based on Latitude and Longitude. User can specify zoom levels, push-pins&#8230;etc<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"442\" alt=\"\" class=\"alignnone size-large wp-image-1822\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Map-1024x442.png\"\/><\/p>\n<p>\u00a0<\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Latitude<\/td>\n<td>Sets the latitude of the location.<\/td>\n<\/tr>\n<tr>\n<td>Longitude<\/td>\n<td>Sets the longitude of the location.<\/td>\n<\/tr>\n<tr>\n<td>Zoom<\/td>\n<td>Zoom level of the map component.<\/td>\n<\/tr>\n<tr>\n<td>Key<\/td>\n<td>Required Bing Map Key to use the component.<\/p>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/bingmaps\/getting-started\/bing-maps-dev-center-help\/getting-a-bing-maps-key\">https:\/\/docs.microsoft.com\/en-us\/bingmaps\/getting-started\/bing-maps-dev-center-help\/getting-a-bing-maps-key<\/a><\/td>\n<\/tr>\n<tr>\n<td>Pushpins<\/td>\n<td>Sets a collection of pins that is rendered within the map.<\/p>\n<pre>Table({Latitude:Location.Latitude,Longitude:Location.Longitude,PinStyle:1,Label:\"A\"},\n{Latitude:47.582119,Longitude:-122.141265,PinStyle:4,Label:\"C\"})<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>Show Zoom<\/td>\n<td>Sets the visibility of the zooming buttons.<\/td>\n<\/tr>\n<tr>\n<td>Styles<\/td>\n<td>Sets a collection of styles that controls various visual aspects of the map.<\/p>\n<pre>Table({Key: \"Imagery\", Value:\"Road\"}, {Key: \"PinStyle\", Value:\"50\"})<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong>Radial Gauge Control<br \/>\n<\/strong>The Gauge Control\u00a0displays a value in a certain range using a needle on a circular face.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"274\" alt=\"\" class=\"alignnone size-large wp-image-1927\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/gauge-1024x274.png\"\/><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Default<\/td>\n<td>Sets the default\u00a0% value of the Gauge. Range from 0-100.<\/td>\n<\/tr>\n<tr>\n<td>Indicator Image Url<\/td>\n<td>Sets the image representing the needle of the gauge.<\/td>\n<\/tr>\n<tr>\n<td>Gauge Background Url<\/td>\n<td>Sets the image representing the semi-circle<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><strong>Geo-Fence Control<\/strong><\/h3>\n<p>A non visual component that signals when the mobile device enters or leaves a particular area within a certain radius. This component will only be visible in the PowerApps Studio and will not render when the app is running.\u00a0 Given Latitude, Longitude and a radius, this control will compute given the current geo-location of the device whether we are withing the specified radius.<\/p>\n<p><img decoding=\"async\" alt=\"\" class=\"alignnone wp-image-1827 size-large\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/GeoFence-1-1024x340.png\"\/><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Latitude<\/td>\n<td>Sets the latitude of the target location.<\/td>\n<\/tr>\n<tr>\n<td>Longitude<\/td>\n<td>Sets the longitude of the target location.<\/td>\n<\/tr>\n<tr>\n<td>Radius<\/td>\n<td>Radius in Kilometer<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"color: #1f9aff;\"><strong>Output<\/strong><\/span><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>IsWithinRadius<\/td>\n<td>Gets a boolean value signaling whether the distance between current location and specified location (Latitude and Longitude) is within the radius.<\/td>\n<\/tr>\n<tr>\n<td>Distance<\/td>\n<td>Gets the distance in Kilometer between current location and specified location<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong style=\"font-size: 1.125rem;\">Tab Control<\/strong><\/p>\n<p>A tab control is a flexible navigation component that can be used to build tabbed interfaces in PowerApps applications.\u00a0 Tabs can be configured to navigate to other screens or to trigger any action such as launching a different app or opening the browser. A tab control can be used for vertical and horizontal menus.<\/p>\n<p><img decoding=\"async\" alt=\"\" class=\"alignnone size-large wp-image-1829\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/TabControl-1024x309.png\"\/><\/p>\n<p>\u00a0<\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Color<\/td>\n<td>Sets the text color.<\/td>\n<\/tr>\n<tr>\n<td>Selected Color<\/td>\n<td>Sets the text color when the tab is selected.<\/td>\n<\/tr>\n<tr>\n<td>Size<\/td>\n<td>Sets the font size of the text.<\/td>\n<\/tr>\n<tr>\n<td>IsVertical<\/td>\n<td>Sets the orientation of the tab control.<\/td>\n<\/tr>\n<tr>\n<td>Items<\/td>\n<td>\n<pre>Table({ Label: \"Tab 1\", Screen: Screen1, Icon: \"\", SelectedIcon:\"\" },\n   { Label: \"Tab 2\", Screen: Screen2, Icon: \"\", SelectedIcon:\"\" },\n   { Label: \"Tab 3\", Screen: Screen3, Icon: \"\", SelectedIcon:\"\" }\n)<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>Styles<\/td>\n<td>Sets a collection of styles that controls various visual aspects of the tab control.<\/p>\n<pre>e.g:\nTable({Key: \"TabControlImageWidth\", Value:\"30\"},\n      {Key: \"Font\", Value:\"Segoe UI\"})<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"color: #1f9aff;\"><strong>Output<\/strong><\/span><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Selected<\/td>\n<td>Sets the selected tab item.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong><span style=\"color: #1f9aff;\">Customization:<\/span><\/strong><\/p>\n<p>With a little bit of customization, we can achieve a\u00a0 different look and feel for the tab control:<\/p>\n<h3><img loading=\"lazy\" decoding=\"async\" width=\"1018\" height=\"517\" alt=\"\" class=\"alignnone wp-image-1865 size-full\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/TabControl3.png\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/02\/TabControl3.webp 1018w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/02\/TabControl3-300x152.webp 300w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/02\/TabControl3-768x390.webp 768w\" sizes=\"auto, (max-width: 1018px) 100vw, 1018px\" \/><\/h3>\n<h3><strong>Dialog Control<\/strong><\/h3>\n<p>Dialog controls are modal UI overlays that provide contextual app information. They block interactions with the app window until being explicitly dismissed. They often request some kind of action from the user.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"298\" alt=\"\" class=\"alignnone size-large wp-image-1850\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Dialog-1024x298.png\"\/><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>OpenClose<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td>Buttons<\/td>\n<td>\n<pre>Table({Label: \"Cancel\", Fill:\"#FFFFFF\", Color:\"#0086D0\"},\n      {Label: \"Ok\", Fill:\"#0086D0\", Color:\"#FFFFFF\"})<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>Title<\/td>\n<td>Sets Title of the Dialog Box.<\/td>\n<\/tr>\n<tr>\n<td>Description<\/td>\n<td>Sets the body text of the dialog box.<\/td>\n<\/tr>\n<tr>\n<td>Styles<\/td>\n<td>\n<pre>e.g:\nTable({Key: \"Font\", Value:\"Segoe UI\"},\n{Key: \"DialogTitleFontSize\", Value:16},\n{Key: \"DialogDescriptionFontSize\", Value:12})\n\n<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>OverlayColor<\/td>\n<td>Sets a collection of styles that controls various visual aspects of the tab control<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><strong>NumericUpDown Control<\/strong><\/h3>\n<p>The NumericUpDown control allows users to increase or decrease a numeric value using the increment and decrement buttons.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"505\" alt=\"\" class=\"alignnone wp-image-1924 size-large\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/NumericUpDown-2-1024x505.png\"\/><\/p>\n<p>\u00a0<\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Min<\/td>\n<td>Sets the minimum value to which the user can set for the NumericUpDown.<\/td>\n<\/tr>\n<tr>\n<td>Max<\/td>\n<td>Sets the maximum value to which the user can set for the NumericUpDown.<\/td>\n<\/tr>\n<tr>\n<td>Increment<\/td>\n<td>Sets the increment used when user increments or decrements the NumericUpDown.<\/td>\n<\/tr>\n<tr>\n<td>BorderThickness<\/td>\n<td>Sets the border thickness of the NumericUpDown.<\/td>\n<\/tr>\n<tr>\n<td>BorderColor<\/td>\n<td>Sets the border color of the NumericUpDown.<\/td>\n<\/tr>\n<tr>\n<td>BorderRadius<\/td>\n<td>Sets the border radius of the NumericUpDown.<\/td>\n<\/tr>\n<tr>\n<td>ButtonsColor<\/td>\n<td>Sets the color of the increment and decrement buttons.<\/td>\n<\/tr>\n<tr>\n<td>Styles<\/td>\n<td>Sets a collection of styles that controls various visual aspects of the NumericUpDown.<\/p>\n<pre>e.g:\nTable({Key: \"Font\", Value:\"Segoe UI\"},\n{Key: \"NudIconPadding\", Value:10})<\/pre>\n<\/td>\n<\/tr>\n<tr>\n<td>Increment Button Icon<\/td>\n<td>Sets the image for the increment button.<\/td>\n<\/tr>\n<tr>\n<td>Decrement Button Icon<\/td>\n<td>Sets the image for the decrement button.<\/td>\n<\/tr>\n<tr>\n<td>Default<\/td>\n<td>Sets the default value of the NumericUpDown<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"color: #1f9aff;\"><strong>Output<\/strong><\/span><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Value<\/td>\n<td>Gets Current Value of the NumericUpDown.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><strong><span style=\"color: #1f9aff;\">Customization:<\/span><\/strong><\/h3>\n<p>\u00a0<\/p>\n<p><img decoding=\"async\" alt=\"\" class=\"alignnone size-large wp-image-1891\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/NumericUpDown2-1024x232.png\"\/><\/p>\n<h3><b>Bar-code<\/b><strong>\u00a0Generator<\/strong><\/h3>\n<p>Barcode generator for code39<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"118\" alt=\"barcode generator\" class=\"alignnone size-large wp-image-1831\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/barcode-1024x118.png\"\/><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Code<\/td>\n<td>Sets the text used the generate the code bar using code 39.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><strong>Calendar Control<br \/>\n<\/strong>A calendar view lets a user view and interact with a calendar that they can navigate by month or year. A user can select a single date or a range of dates.<strong><br \/>\n<\/strong><\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"429\" alt=\"Calendar Control\" class=\"alignnone size-large wp-image-1832\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Calendar-1024x429.png\"\/><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Color<\/td>\n<td>Sets color of the text.<\/td>\n<\/tr>\n<tr>\n<td>Select Range<\/td>\n<td>Set the mode of operation of the calendar. When set to true, user can select a range of dates. When false, user can only select a unique date<\/td>\n<\/tr>\n<tr>\n<td>BorderRadius<\/td>\n<td>Sets the border radiaus of the selected date rectangle.<\/td>\n<\/tr>\n<tr>\n<td>Selected Date Color<\/td>\n<td>Sets the color of the text of the selected date.<\/td>\n<\/tr>\n<tr>\n<td>Selected Date Fill<\/td>\n<td>Sets the background color of the selected date rectangle<\/td>\n<\/tr>\n<tr>\n<td>Default Start Date<\/td>\n<td>Sets the default start date.<\/td>\n<\/tr>\n<tr>\n<td>Default End Date<\/td>\n<td>Sets the default end date.<\/td>\n<\/tr>\n<tr>\n<td>Styles<\/td>\n<td>\n<pre>e.g: Table({Key: \"Font\", Value:\"Segoe UI\"})<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"color: #1f9aff;\"><strong>Output<\/strong><\/span><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>StartDate<\/td>\n<td>The selected start date.<\/td>\n<\/tr>\n<tr>\n<td>EndDate<\/td>\n<td>The selected end date. This default to start date when the Select Range is set to false.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><strong style=\"font-size: 1.125rem;\">ColorPicker Control<br \/>\n<\/strong>A color picker is used to browse through and select colors. By default, it lets a user navigate through colors on a color spectrum, or specify a color in either Red-Green-Blue (RGB) or Hexadecimal textboxes.<strong><br \/>\n<\/strong><br \/>\n<img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-full wp-image-1833\" height=\"338\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/ColorPicker.png\" width=\"544\" srcset=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/02\/ColorPicker.webp 544w, https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2019\/02\/ColorPicker-300x186.webp 300w\" sizes=\"auto, (max-width: 544px) 100vw, 544px\" \/><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Default<\/td>\n<td>Sets the default color for the Color Picker in Hex representation<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"color: #1f9aff;\"><strong>Output<\/strong><\/span><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>SelectedColor<\/td>\n<td>Gets the selected Color value.<\/td>\n<\/tr>\n<tr>\n<td>SelectedHexColor<\/td>\n<td>Gets the selected Color value in Hex representation.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3><strong>Preloader Control<br \/>\n<\/strong>A progress control provides feedback to the user that a long-running operation is underway. It can mean that the user cannot interact with the app when the progress indicator is visible, and can also indicate how long the wait time might be, depending on the indicator used.<\/h3>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"\" class=\"alignnone size-large wp-image-1844\" height=\"396\" src=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Preloader-1024x773.png\" width=\"525\"\/><\/p>\n<table>\n<thead>\n<tr>\n<th>Property<\/th>\n<th>Description<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Animated Gif<\/td>\n<td>Sets the animated Gif for the Preloader animation.<\/td>\n<\/tr>\n<tr>\n<td>Text<\/td>\n<td>Sets the text for the preloader<\/td>\n<\/tr>\n<tr>\n<td>Color<\/td>\n<td>Sets the color of the preloader text.<\/td>\n<\/tr>\n<tr>\n<td>Styles<\/td>\n<td>Sets a collection of styles that controls various visual aspects of the Preloader.<\/p>\n<pre>e.g:\nTable({Key: \"Font\", Value:\"Segoe UI\"})<\/pre>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr\/>\n<p>Give it a try !\u00a0 We would love to hear your feedback. We have more open-source components coming soon to the PowerApps Tools <a href=\"https:\/\/github.com\/Microsoft\/powerapps-tools\">github<\/a> repository&#8230;. If you have any feedback or issues, please feel free to add to\u00a0<a href=\"https:\/\/github.com\/Microsoft\/powerapps-tools\/issues\">https:\/\/github.com\/Microsoft\/powerapps-tools\/issues.\u00a0<\/a><\/p>\n<p>\u00a0<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog post will present a set of custom controls built using the new PowerApps component feature for Canvas apps. As a prerequisite, check out Yifie Wang&#8217;s blog post introducing the PowerApps components feature and Brian Dang&#8217;s &#8220;start your journey with components&#8221; blog post that includes instructions on importing\/exporting components and more.<\/p>\n","protected":false},"author":101,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ms_queue_id":[],"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","_alt_title":"","ms-ems-related-posts":[],"footnotes":""},"audience":[3378],"content-type":[],"job-role":[],"product":[3473],"property":[],"topic":[3421],"coauthors":[2051],"class_list":["post-1659","post","type-post","status-publish","format-standard","hentry","audience-it-professional","product-power-apps","topic-application-modernization"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>10 Reusable Components: tab control, calendar, dialog box, map control and more - Microsoft Power Platform Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"10 Reusable Components: tab control, calendar, dialog box, map control and more - Microsoft Power Platform Blog\" \/>\n<meta property=\"og:description\" content=\"This blog post will present a set of custom controls built using the new PowerApps component feature for Canvas apps. As a prerequisite, check out Yifie Wang&#8217;s blog post introducing the PowerApps components feature and Brian Dang&#8217;s &#8220;start your journey with components&#8221; blog post that includes instructions on importing\/exporting components and more.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/powerapps-ten-reusable-components\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Power Platform Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-02-26T18:08:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-11T15:05:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2490\" \/>\n\t<meta property=\"og:image:height\" content=\"1095\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mehdi Slaoui Andaloussi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mehdi Slaoui Andaloussi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/\"},\"author\":[{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/mehdi-slaoui-andaloussi\/\",\"@type\":\"Person\",\"@name\":\"Mehdi Slaoui Andaloussi\"}],\"headline\":\"10 Reusable Components: tab control, calendar, dialog box, map control and more\",\"datePublished\":\"2019-02-26T18:08:00+00:00\",\"dateModified\":\"2025-06-11T15:05:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/\"},\"wordCount\":1282,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/\",\"name\":\"10 Reusable Components: tab control, calendar, dialog box, map control and more - Microsoft Power Platform Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png\",\"datePublished\":\"2019-02-26T18:08:00+00:00\",\"dateModified\":\"2025-06-11T15:05:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#primaryimage\",\"url\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png\",\"contentUrl\":\"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"10 Reusable Components: tab control, calendar, dialog box, map control and more\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\",\"name\":\"Microsoft Power Platform Blog\",\"description\":\"Innovate with Business Apps\",\"publisher\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization\",\"name\":\"Microsoft Power Platform Blog\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"contentUrl\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png\",\"width\":194,\"height\":145,\"caption\":\"Microsoft Power Platform Blog\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/person\/cb94deacde69a416821745caea3a4ea9\",\"name\":\"Mehdi Slaoui Andaloussi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=gee4168e8cdfe65faaf608acb5baeaed5\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=g\",\"caption\":\"Mehdi Slaoui Andaloussi\"},\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/mehdis\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"10 Reusable Components: tab control, calendar, dialog box, map control and more - Microsoft Power Platform Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/","og_locale":"en_US","og_type":"article","og_title":"10 Reusable Components: tab control, calendar, dialog box, map control and more - Microsoft Power Platform Blog","og_description":"This blog post will present a set of custom controls built using the new PowerApps component feature for Canvas apps. As a prerequisite, check out Yifie Wang&#8217;s blog post introducing the PowerApps components feature and Brian Dang&#8217;s &#8220;start your journey with components&#8221; blog post that includes instructions on importing\/exporting components and more.","og_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/powerapps-ten-reusable-components\/","og_site_name":"Microsoft Power Platform Blog","article_published_time":"2019-02-26T18:08:00+00:00","article_modified_time":"2025-06-11T15:05:05+00:00","og_image":[{"width":2490,"height":1095,"url":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png","type":"image\/png"}],"author":"Mehdi Slaoui Andaloussi","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Mehdi Slaoui Andaloussi","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#article","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/"},"author":[{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/mehdi-slaoui-andaloussi\/","@type":"Person","@name":"Mehdi Slaoui Andaloussi"}],"headline":"10 Reusable Components: tab control, calendar, dialog box, map control and more","datePublished":"2019-02-26T18:08:00+00:00","dateModified":"2025-06-11T15:05:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/"},"wordCount":1282,"commentCount":0,"publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#primaryimage"},"thumbnailUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/","name":"10 Reusable Components: tab control, calendar, dialog box, map control and more - Microsoft Power Platform Blog","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#primaryimage"},"thumbnailUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png","datePublished":"2019-02-26T18:08:00+00:00","dateModified":"2025-06-11T15:05:05+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#primaryimage","url":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png","contentUrl":"https:\/\/powerappsblogmedia.azureedge.net\/powerappsblog\/2019\/02\/Controls-1024x450.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2019\/02\/26\/powerapps-ten-reusable-components\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/"},{"@type":"ListItem","position":2,"name":"10 Reusable Components: tab control, calendar, dialog box, map control and more"}]},{"@type":"WebSite","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#website","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/","name":"Microsoft Power Platform Blog","description":"Innovate with Business Apps","publisher":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#organization","name":"Microsoft Power Platform Blog","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","contentUrl":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-content\/uploads\/2020\/03\/Microsoft-Logo-e1685482038800.png","width":194,"height":145,"caption":"Microsoft Power Platform Blog"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/#\/schema\/person\/cb94deacde69a416821745caea3a4ea9","name":"Mehdi Slaoui Andaloussi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=gee4168e8cdfe65faaf608acb5baeaed5","url":"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7d08f4b5403b8c9bcddc1a86d1029fe871d0429f3b1bcf391b42f4f6de826c74?s=96&d=mm&r=g","caption":"Mehdi Slaoui Andaloussi"},"url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/mehdis\/"}]}},"bloginabox_animated_featured_image":null,"bloginabox_display_generated_audio":false,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Power Platform Blog","distributor_original_site_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/1659","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/users\/101"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/comments?post=1659"}],"version-history":[{"count":1,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/1659\/revisions"}],"predecessor-version":[{"id":130942,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/1659\/revisions\/130942"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/media?parent=1659"}],"wp:term":[{"taxonomy":"audience","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/audience?post=1659"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/content-type?post=1659"},{"taxonomy":"job-role","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/job-role?post=1659"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/product?post=1659"},{"taxonomy":"property","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/property?post=1659"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/topic?post=1659"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/coauthors?post=1659"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}