<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.augmensys.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CWI</id>
		<title>UBIK Wiki / Augmensys - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.augmensys.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=CWI"/>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Special:Contributions/CWI"/>
		<updated>2026-06-22T14:14:32Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29982</id>
		<title>Version 5.1 (Mobile)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29982"/>
				<updated>2026-06-18T12:59:00Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|Existing pre 5.0 XAMLs are not compatible with UBIK Mobile client 5.1. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|UBIK 5 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|The minimum supported OS versions are:&lt;br /&gt;
* Android 9;&lt;br /&gt;
* iOS 12.}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Preview}}: Available through Google Play Store's [https://play.google.com/store/apps/details?id=com.augmensys.ubik.go invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/Kmb1HG9E invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Preview}}: Available through Apple App Store's [https://testflight.apple.com/join/yHRnbYbt invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|Windows: Store Preview}}: The mobile Windows client is not an official product and is only distributed as test versions upon request and/or in our [https://release.augmensys.com/download/modules/client/mobile/ release portal].&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* New features and enhancements in MRO.&lt;br /&gt;
** {{UBIK}} now supports defining [[MRO_Objects_(Client)#Procedure_Tasks|branching logic in procedure work packages]].&lt;br /&gt;
** {{UBIK}} now supports [[MRO_Objects_(Client)#Procedure_Tasks|calculation tasks which evaluate predefined expressions]].&lt;br /&gt;
** {{UBIK}} now supports [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Tasks]] configured with an [[Active_List_Client|Active List]].&lt;br /&gt;
** Added  [[MRO_Objects_(Client)#Numeric_Task|Numeric Tasks]] to record numeric values that are checked against an acceptable value range.&lt;br /&gt;
** Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
** [[MRO_Objects_(Client)#Signature_Task|MRO Signature Tasks]] have been introduced, which automatically displays the signee as well as the validation timestamp after the task has been signed.&lt;br /&gt;
* UBIK now supports [[Traits]] which are more flexible when it comes to server side configuration and maintenance.&lt;br /&gt;
* The system flashlight can now also be enabled or disabled via XAML customization. For detailed information, see [[Mobile XAML#Flashlight|Flashlight]]&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* Fixed an issue where changes in property editing were not discarded when using the default Back button.&lt;br /&gt;
* Fixed an issue where the application crashed on Windows when navigating back from the VideoPlayer.&lt;br /&gt;
* Icon set Addition 8: Added Show/Hide, AI, Info, and various Procedure icons.&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where MRO task items displayed an incorrect DataTemplate after scrolling within a list.&lt;br /&gt;
* Fixed an issue where the client could fail at large file uploads (or even crash) due to device running out of memory.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems. The standard UI is not yet redesigned to show multi-line texts, though. But you can do so in customizing if necessary.&lt;br /&gt;
* Fixed the UI of some templates that weren't displayed correctly in Multi Select Mode.&lt;br /&gt;
* Fixed an issue where the status color was reflected as background color of an POI item.&lt;br /&gt;
* Fixed an issue where it was not possible to do a alternative import of a .profile file on iOS &amp;amp; Android.&lt;br /&gt;
* Fixed an issue where it was possible some list items were not updated correctly when e.g. you scroll through the list&lt;br /&gt;
* Fixed an issue where setting the SelectedIndex of a UBIKTabView leads to a crash.&lt;br /&gt;
* Fixed an issue where [[XAML_Tips#InvokeOnItemsCommand|BulkOperation.InvokeOnItemsCommand]] was not always applied to all items in the collection.&lt;br /&gt;
* Fixed an issue where the app sometimes redirects to the login page on certain Android devices. For example, when the device rotates or a physical keyboard is attached.&lt;br /&gt;
* Fixed an issue where the task value editing field is unlimited in space and covers everything else.&lt;br /&gt;
* Fixed an issue where filtering was not possible in query popups.&lt;br /&gt;
* Fixed an issue where it was not possible to set N/A via editors.&lt;br /&gt;
* Fixed an issue where the Properties UI was not refreshed properly after reverting changes.&lt;br /&gt;
* Fixed an issue where the app gets stuck during login when there are geography properties without values.&lt;br /&gt;
* Fixed an issue where the root object list doesn't get fully refreshed upon meta definition updates.&lt;br /&gt;
* Fixed a potential UI performance issue during file upload.&lt;br /&gt;
* Fixed an issue where it's impossible to show document files externally from list items.&lt;br /&gt;
* (iOS) Fixed an issue where the NFC button in the side menu looked like a toggle button while it's not.&lt;br /&gt;
* Fixed an issue where the Unit of a Task value has been clipped.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== 5.1.30 2026-03-02 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.29 on 2026-02-26 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue where the POI button was only visible under certain condition (ShowUnreleasedFeatures in the profile is set to true).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.28 on 2026-02-10 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* The following features which existed in pre 5.0 versions are now available again in 5.1.&lt;br /&gt;
** [[Map_View|Map view]].&lt;br /&gt;
** [[POI_View_(Mobile)|POI view]]. (Aruco and OCR are not yet supported)&lt;br /&gt;
** Location service.&lt;br /&gt;
** [[Native_Push_(Client)|Native push]].&lt;br /&gt;
** [[Charts]].&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Complete UI overhaul introduces a cleaner, more modern and adaptive user interface with various quality of life improvements.&lt;br /&gt;
* UBIKTabView supports both dynamic and static items in combination with lazy loading.&lt;br /&gt;
* Files in the app's data folder can now be opened or deleted directly in the developer settings.&lt;br /&gt;
* Introduced a fully resource-driven UI theming system enabling fast, safe customization (dark mode, resizing, and consistent styling) by adapting a small set of centralized resources.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* Fixed an issue where remembered scroll positions were lost when the ItemsSource property of an SfListViewExt changed (e.g., Properties.ShowAllProperties).&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed issue that caused app to be stuck on splash screen after resuming from background.&lt;br /&gt;
* Fixed an issue where StatusColor was not shown in the UI for objects that didn't additionally have a Progress.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Fixed an issue that caused content of the custom ContentControl to not be rendered sometimes.&lt;br /&gt;
* (Android) Fixed an issue in the WebView where some links could not be opened.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the deletion of some objects was not reflected in the UI until refresh.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true. In Mobile, deleting the last annotation does not correctly update the editor's internal edit state. As a result, the Save button may remain visible even though no edits exist.&lt;br /&gt;
* When changing the device orientation during attaching a photo on iOS, the app gets stuck. This is an issue Microsoft confirmed in .NET9 and will fix in .NET10.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
* The periodic execution of background pushes is not guaranteed on iOS (the native push feature doesn't have this issue).&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* It is currently not possible to select which camera to use for AR views (e.g. scan page) on Windows.&lt;br /&gt;
* SfPullToRefresh was removed due to [[Mobile_XAML#Issues_with_SfPullToRefresh_in_Mobile_client|existing issues]], and replaced with a Refresh option in the Context menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
* Due to the change of the underlying XAML technology, the existing XAMLs for the old mobile clients (pre 5.0) are no longer compatible. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.&lt;br /&gt;
* There are some XAML changes necessary when using the new [[Active_List_Client|Active List]] feature, or when using the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]]. These XAML changes are explained [[Active_List_Client#XAML|here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29885</id>
		<title>Version 5.1 (Mobile)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29885"/>
				<updated>2026-05-20T10:02:02Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|Existing pre 5.0 XAMLs are not compatible with UBIK Mobile client 5.1. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|UBIK 5 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|The minimum supported OS versions are:&lt;br /&gt;
* Android 9;&lt;br /&gt;
* iOS 12.}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Preview}}: Available through Google Play Store's [https://play.google.com/store/apps/details?id=com.augmensys.ubik.go invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/Kmb1HG9E invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Preview}}: Available through Apple App Store's [https://testflight.apple.com/join/yHRnbYbt invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|Windows: Store Preview}}: The mobile Windows client is not an official product and is only distributed as test versions upon request and/or in our [https://release.augmensys.com/download/modules/client/mobile/ release portal].&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* UBIK Client now supports [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Tasks]] configured with an [[Active_List_Client|Active List]].&lt;br /&gt;
* Added  [[MRO_Objects_(Client)#Numeric_Task|Numeric Tasks]] to record numeric values that are checked against an acceptable value range.&lt;br /&gt;
* UBIK now supports [[Traits]] which are more flexible when it comes to server side configuration and maintenance.&lt;br /&gt;
* Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
* The system flashlight can now also be enabled or disabled via XAML customization. For detailed information, see [[Mobile XAML#Flashlight|Flashlight]]&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* [[MRO_Objects_(Client)#Signature_Task|MRO Signature Tasks]] have been introduced, which automatically displays the signee as well as the validation timestamp after the task has been signed.&lt;br /&gt;
* Fixed an issue where changes in property editing were not discarded when using the default Back button.&lt;br /&gt;
* Fixed an issue where the application crashed on Windows when navigating back from the VideoPlayer.&lt;br /&gt;
* Icon set Addition 8: Added Show/Hide, AI, Info, and various Procedure icons.&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where MRO task items displayed an incorrect DataTemplate after scrolling within a list.&lt;br /&gt;
* Fixed an issue where the client could fail at large file uploads (or even crash) due to device running out of memory.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems. The standard UI is not yet redesigned to show multi-line texts, though. But you can do so in customizing if necessary.&lt;br /&gt;
* Fixed the UI of some templates that weren't displayed correctly in Multi Select Mode.&lt;br /&gt;
* Fixed an issue where the status color was reflected as background color of an POI item.&lt;br /&gt;
* Fixed an issue where it was not possible to do a alternative import of a .profile file on iOS &amp;amp; Android.&lt;br /&gt;
* Fixed an issue where it was possible some list items were not updated correctly when e.g. you scroll through the list&lt;br /&gt;
* Fixed an issue where setting the SelectedIndex of a UBIKTabView leads to a crash.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== 5.1.30 2026-03-02 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.29 on 2026-02-26 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue where the POI button was only visible under certain condition (ShowUnreleasedFeatures in the profile is set to true).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.28 on 2026-02-10 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* The following features which existed in pre 5.0 versions are now available again in 5.1.&lt;br /&gt;
** [[Map_View|Map view]].&lt;br /&gt;
** [[POI_View_(Mobile)|POI view]]. (Aruco and OCR are not yet supported)&lt;br /&gt;
** Location service.&lt;br /&gt;
** [[Native_Push_(Client)|Native push]].&lt;br /&gt;
** [[Charts]].&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Complete UI overhaul introduces a cleaner, more modern and adaptive user interface with various quality of life improvements.&lt;br /&gt;
* UBIKTabView supports both dynamic and static items in combination with lazy loading.&lt;br /&gt;
* Files in the app's data folder can now be opened or deleted directly in the developer settings.&lt;br /&gt;
* Introduced a fully resource-driven UI theming system enabling fast, safe customization (dark mode, resizing, and consistent styling) by adapting a small set of centralized resources.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* Fixed an issue where remembered scroll positions were lost when the ItemsSource property of an SfListViewExt changed (e.g., Properties.ShowAllProperties).&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed issue that caused app to be stuck on splash screen after resuming from background.&lt;br /&gt;
* Fixed an issue where StatusColor was not shown in the UI for objects that didn't additionally have a Progress.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Fixed an issue that caused content of the custom ContentControl to not be rendered sometimes.&lt;br /&gt;
* (Android) Fixed an issue in the WebView where some links could not be opened.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the deletion of some objects was not reflected in the UI until refresh.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true. In Mobile, deleting the last annotation does not correctly update the editor's internal edit state. As a result, the Save button may remain visible even though no edits exist.&lt;br /&gt;
* When changing the device orientation during attaching a photo on iOS, the app gets stuck. This is an issue Microsoft confirmed in .NET9 and will fix in .NET10.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
* The periodic execution of background pushes is not guaranteed on iOS (the native push feature doesn't have this issue).&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* It is currently not possible to select which camera to use for AR views (e.g. scan page) on Windows.&lt;br /&gt;
* SfPullToRefresh was removed due to [[Mobile_XAML#Issues_with_SfPullToRefresh_in_Mobile_client|existing issues]], and replaced with a Refresh option in the Context menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
* Due to the change of the underlying XAML technology, the existing XAMLs for the old mobile clients (pre 5.0) are no longer compatible. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.&lt;br /&gt;
* There are some XAML changes necessary when using the new [[Active_List_Client|Active List]] feature, or when using the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]]. These XAML changes are explained [[Active_List_Client#XAML|here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29878</id>
		<title>MRO Objects (Client)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29878"/>
				<updated>2026-05-11T11:08:24Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Organisational Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:MRO_WinX.png|thumb|alt=MRO Child List UI (WinX)|MRO UI (WinX)]]&lt;br /&gt;
[[File:MRO_MAUI1.jpeg|thumb|alt=MRO Child List UI (Android)|MRO UI (Android)]]&lt;br /&gt;
The WinX client UI displays MRO configured objects like any other root- or child-object enriched by some additional logic and features.&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
The representation of MRO features comprises some indicators and interactive controls. In the {{UBIK}} child list, the main object displays cumulated technical and organisational status as well as the overall work progress based on the underlying data branch. Objects classified as MRO objects in general provide indicators for the MRO status. This means the status is shown next to the main icon of a child-/details-/documents-page as well as next to the icons of the child list items:&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on all objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. If e.g. a inventory object is reported as damaged, its parent objects will all display the exclamation mark symbol to indicate that a problem was reported in the child items.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (Winx &amp;amp; Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
The organisational status indicates the amount of confirmed work within the data branch, including already confirmed work packages as well as tasks that are locked by their owning work package. The organisational status indicator is displayed on all objects that represent an organisational state or receive the organisational status from subsequent objects in the underlying data branch, and visualizes the amount of confirmed work performed within that branch.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:OrgaStatusIndicatorWinX.PNG|Organisational Status Indicator (WinX)&lt;br /&gt;
File:ConfirmedWP_WinX.png|MRO Workpackage Confirmed (Flag) Indicator (WinX)&lt;br /&gt;
File:Android_orga_status.PNG|Organisational Status Indicator (Android)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|MRO Workpackage Confirmed Indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
The work progress is calculated from the current work progress and from the progress cumulated from subsequent objects in the underlying data branch. This indicator shows the amount of work done in the data branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, the progress is displayed with maximum one decimal place. For example, 99.75% is displayed as 99.8%. The format string used to achieve this is &amp;lt;code&amp;gt;{0:0.#}%&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If other numeric formats are preferred in your usecases, you can refer to [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings] for more information. The template to customize for this is the UBIKMROProgressBadge within UBIKThemes.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|MRO Workpackage confirm button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|MRO Workpackage revoke confirmation button (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|MRO Workpackage confirm button (Android)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|MRO Workpackage revoke confirmation button (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
On both clients, a Task can be reverted by clicking twice on the Not Applicable button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Therefore, clicking the value on the shown task opens an editor to enter the desired value. If no value was entered before, an empty line will be shown. Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). An additional small value indicator below the main value can report e.g. the previously entered value. The behaviour of this previous value indicator has to be specified separately in the customizing.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Measurment Task Empty UWP.png|Measurement Task without a reported value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a reported value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a reported value (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
There is also an [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] available for progress tasks.{{Version/WinXSince|2.5.4}}&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Progress Task UWP.png|Progress Task with a reported work progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with a reported work progress and a previous progress(Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Unfinished MRO CheckTask (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable MRO CheckTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Finished Inspection Task UWP.png|Finished MRO InspectionTask (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished MRO InspectionTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|sequential task classification]] allows you to pre-define a sequence in which tasks are to be resolved by users. This means that it is required for one or multiple tasks to be finished in order for other tasks to become &amp;quot;unlocked&amp;quot; and editable. A task can have any number of &amp;quot;predecessors&amp;quot;. Predecessors are the tasks that are required to be finished first.&lt;br /&gt;
&lt;br /&gt;
A task can have predecessors that live anywhere else in the object hierarchy. It is not necessary for a task and its predecessors to be part of the same work package, even though this is likely the most common use case.&lt;br /&gt;
&lt;br /&gt;
The state of a sequential task is evaluated both offline and online to get the best possible user experience. The user will see dependent tasks update immediately if their successors were finished, if those tasks are currently visible in the UI. There is 1 case in which the server-side state will override the client-side (offline) evaluation, discussed below.&lt;br /&gt;
The state of each sequential task is evaluated the following way:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says the task is open, we consider this as the truthful state and don't do any other evaluation.&lt;br /&gt;
# Check if the task has any predecessors.&lt;br /&gt;
# Try to load each predecessor task.&lt;br /&gt;
#* If loading of any predecessor fails (the object is not available offline), the task will be locked.&lt;br /&gt;
# If all predecessor tasks are finished, the task is open and can be edited. Otherwise, the task is locked.&lt;br /&gt;
&lt;br /&gt;
The customizer setting up the task dependency relations needs to ensure that the dependencies are not cyclical. In this case, it would be impossible for any tasks in the &amp;quot;cycle&amp;quot; to be finished.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
As a demonstration of this feature, see [[Media:Sequential_tasks_winx.mp4|this video]]. The relations between tasks are defined as in [[Media:Task_relations.png|this image]], starting at A1 and A2, which are not dependent on any other tasks. The lines (from left to right) indicate dependencies. This means that B2 has tasks A1 and A2 as its predecessors, for example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
Sometimes, not all tasks have to be finished. More specifically, there might be a predefined condition where you only need to finish a certain number of tasks among a group of them. These are known in {{UBIK}} as [[MROCLS_GROUPEDTASK|grouped tasks]].&lt;br /&gt;
&lt;br /&gt;
The idea is, a group of tasks can be defined as siblings to each other and they also share the same server configured threshold. When the number of finished tasks among that group exceeds the threshold, the entire group is considered as no longer necessary. When reflected in the overall status of the task owner(s), these tasks would appear as if they are finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, the finished status is completely independent from the not necessary status on a task. A grouped task which is no longer necessary can be both finished or not yet finished. In other words, users don't have to finish a not necessary grouped task, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation for grouped tasks and their task owners requires the knowledge of all siblings tasks. Imagine 2 out of 3 tasks must be finished but the client only knows 1 in total and the others are only available at the server at that time. This makes it impossible to draw conclusions whether the task(s) should be necessary or not. Under such circumstances, the local status calculation is done as if these are just regular tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|Like with the other MRO objects, the client always chooses the best available statuses for grouped tasks to present to the users. More specifically, it uses the statuses calculated by the server when the client is not offline and there are no uncommitted local changes on the involved objects. Otherwise, it uses the statuses calculated locally to the best of its knowledge.}}&lt;br /&gt;
&lt;br /&gt;
A task can also be a grouped and a sequential one at the same time. In such a case, the grouped nature of the sibling tasks will affect the way the task sequence completes.&lt;br /&gt;
&lt;br /&gt;
For example, task A1, A2 and A3 are 3 grouped sibling tasks and only 1 of them needs to be finished. At the same time, they are all predecessors of task B. Normally, all predecessors must be finished (and locked) before task B becomes the next one in the sequence and therefore unlocked. In this case, however, as soon as one of the predecessors is finished, all three become unnecessary (and locked) and task B unlocks as a result of that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Supervisor Task {{Version/XamarinSince|4.8}} ====&lt;br /&gt;
As the name suggests, supervisor tasks are those that must be finished under supervision. When users want to finish a [[MROCLS_MRO_SUPERVISOR_TASK|supervisor task]], they must hand over their work devices to a supervisor. The latter checks the work status and scans an NFC tag if the work is approved. If the [[MROCLS_MRO_SUPERVISOR|supervisor]] has sufficient permissions for the task and the correct supervisor PIN is given, the task gets unlocked and the users can proceed to finish it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300px heights=300px&amp;gt;&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Before_Verification.jpg|Supervisor Task Before Verification/Unlocking (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor Task Enter PIN (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Task After Verification/Unlocking (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A thing to note is that while the need to verify a supervisor task can be seen as a type of locking, it's certainly not the only reason for a [[Locked_Objects|locked object]]. This means a supervisor task can remain locked (although for different reasons) even after a supervisor has successfully verified it. This can often be the case if you use it in combination with other features such as [[MRO_Objects_(Client)#Sequential_Task|sequential tasks]], [[User_Rights|user rights]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For security reasons, the verification process is cancelled if the supervisor enters the wrong PIN for three times. Scanning the tag again is required in that case.}}&lt;br /&gt;
{{Hint|A setting controls [[RFID_tags#Choose_which_information_to_use_from_a_tag|which information in a scanned tag is used]] during this process.}}&lt;br /&gt;
&lt;br /&gt;
==== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
The Signature Task is a task type that is completed by capturing a handwritten signature from the user. The task contains an editor field that serves as the entry point for the signing process. When the user clicks (or taps) on the editor field, a signature dialog opens. Within this dialog, the user can provide their signature. After confirming the input, the signature is saved and the task is automatically marked as completed.&lt;br /&gt;
&lt;br /&gt;
If the task is signed while the client is online:&lt;br /&gt;
* The User (signee) is resolved immediately by the server and displayed.&lt;br /&gt;
* The ValidationTimestamp is generated and displayed.&lt;br /&gt;
* Both values are shown directly in the editor field after signing.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The User only gets resolved by the server and displayed once you're in online mode}}&lt;br /&gt;
&lt;br /&gt;
If the displayed User and/or ValidationTimestamp cannot be fully shown due to limited space in the editor field, the complete information can be accessed via a Popup.&lt;br /&gt;
To show the Popup displaying the full User and ValidationTimestamp without truncation, click on the editor field.&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;br /&gt;
&lt;br /&gt;
==== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICTURE_TASK|picture task]] is a check task which can only be finished when it has at least one child document containing a valid file. In the UI, an additional photo button is presented next to the check so users can easily take photos before finishing the tasks.&lt;br /&gt;
* As any other objects, picture tasks can carry and display [[SYSCLS_CHILDINFOOWNER|child count information]]. But that is not a mandatory part of the feature. Even when it's not configured and not visible in the UI, you can still finish the tasks.&lt;br /&gt;
* In WinX/UWP, the UI also presents an expander which allows you to display the child documents of picture tasks. This is not present by default in the Mobile app due to the screen size limit but [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|can be easily customized]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|The task is named as such because pictures are the most commonly used types, but the child documents can be of other types as well. }}&lt;br /&gt;
&lt;br /&gt;
When a user tries to finish a picture task by tapping the check, the app might perform some data synchronization first if in online mode, which includes&lt;br /&gt;
* Syncing the child objects (including documents) of the task.&lt;br /&gt;
* Downloading the file(s) of the child documents.&lt;br /&gt;
During data synchronization, the check button on that task turns into a wait indicator. Afterwards, the app checks if the prerequisites to finish the task are met.&lt;br /&gt;
* If there are no child documents or no local files for the child documents, the task remains unfinished and the user gets informed about the reasons.&lt;br /&gt;
* Otherwise, the task gets finished and the photo button gets disabled.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Setting NA (not applicable) on a picture task is always possible, regardless of the condition of child documents.}}&lt;br /&gt;
&lt;br /&gt;
==== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_NUMERIC_TASK|numeric task]] is a task which records a double value (e.g. from a temperature sensor). Entering the value (including Not Applicable) completes the task.&lt;br /&gt;
* The value is compared against an accaptable value range which is not editable on the client.&lt;br /&gt;
* Deviation from this range results in visual feedback as well as the [[#Tech Status|tech status]] being set to display an issue.&lt;br /&gt;
* If the configured value range is invalid (e.g. min &amp;gt; max) and the user enters a value, the [[#Tech Status|tech status]] will also be set to display an issue.&lt;br /&gt;
* A numeric task also has a special value unit that can be set per task instance. If set, it overrides the standard value unit defined on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
==== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICK_LIST_TASK|Pick List task]] looks and behaves the same like a standard Integer Task with SelectiveList. Other than the standard Integer Task, the Pick List Task has an [[UBIK_Active_Lists|Active List]] defined on instance level to pick from for its value property. The task counts as finished as soon as a list item has been selected, or when pressing ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MRO objects with project information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Info (WinX)]]&lt;br /&gt;
An MRO object (except tasks) might also bring along [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information together with the MRO progress are displayed in a bar chart. The start &amp;amp; end dates of the MRO object are displayed on the progress bar. The length and the position of the progress bar, together with the current date mark indicate the timeline.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
When an (MRO) object is locked, editing it becomes impossible. More details about [[Locked_Objects|locked objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MROCLS_PROJECT]]&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]]&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]]&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]]&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=File:OrgaStatusIndicatorWinX.PNG&amp;diff=29877</id>
		<title>File:OrgaStatusIndicatorWinX.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=File:OrgaStatusIndicatorWinX.PNG&amp;diff=29877"/>
				<updated>2026-05-11T11:08:03Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=File:OrgStatusIndicator.png&amp;diff=29875</id>
		<title>File:OrgStatusIndicator.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=File:OrgStatusIndicator.png&amp;diff=29875"/>
				<updated>2026-05-11T11:06:08Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: CWI uploaded a new version of File:OrgStatusIndicator.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=File:OrgStatusIndicator.png&amp;diff=29874</id>
		<title>File:OrgStatusIndicator.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=File:OrgStatusIndicator.png&amp;diff=29874"/>
				<updated>2026-05-11T11:06:00Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: CWI uploaded a new version of File:OrgStatusIndicator.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=File:OrgStatusIndicator.png&amp;diff=29873</id>
		<title>File:OrgStatusIndicator.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=File:OrgStatusIndicator.png&amp;diff=29873"/>
				<updated>2026-05-11T11:05:17Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: CWI uploaded a new version of File:OrgStatusIndicator.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29808</id>
		<title>MRO Objects (Client)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29808"/>
				<updated>2026-05-07T10:20:19Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:MRO_WinX.png|thumb|alt=MRO Child List UI (WinX)|MRO UI (WinX)]]&lt;br /&gt;
[[File:MRO_MAUI1.jpeg|thumb|alt=MRO Child List UI (Android)|MRO UI (Android)]]&lt;br /&gt;
The WinX client UI displays MRO configured objects like any other root- or child-object enriched by some additional logic and features.&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
The representation of MRO features comprises some indicators and interactive controls. In the {{UBIK}} child list, the main object displays cumulated technical and organisational status as well as the overall work progress based on the underlying data branch. Objects classified as MRO objects in general provide indicators for the MRO status. This means the status is shown next to the main icon of a child-/details-/documents-page as well as next to the icons of the child list items:&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on all objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. If e.g. a inventory object is reported as damaged, its parent objects will all display the exclamation mark symbol to indicate that a problem was reported in the child items.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (Winx &amp;amp; Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
The organisational status indicates the amount of confirmed work within the data branch, including already confirmed work packages as well as tasks that are locked by their owning work package. The organisational status indicator is displayed on all objects that represent an organisational state or receive the organisational status from subsequent objects in the underlying data branch, and visualizes the amount of confirmed work performed within that branch.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UI_WinX_MRO_OrganisationalStatusIndicator.png|Organisational Status Indicator (WinX)&lt;br /&gt;
File:ConfirmedWP_WinX.png|MRO Workpackage Confirmed (Flag) Indicator (WinX)&lt;br /&gt;
File:Android_orga_status.PNG|Organisational Status Indicator (Android)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|MRO Workpackage Confirmed Indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
The work progress is calculated from the current work progress and from the progress cumulated from subsequent objects in the underlying data branch. This indicator shows the amount of work done in the data branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, the progress is displayed with maximum one decimal place. For example, 99.75% is displayed as 99.8%. The format string used to achieve this is &amp;lt;code&amp;gt;{0:0.#}%&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If other numeric formats are preferred in your usecases, you can refer to [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings] for more information. The template to customize for this is the UBIKMROProgressBadge within UBIKThemes.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|MRO Workpackage confirm button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|MRO Workpackage revoke confirmation button (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|MRO Workpackage confirm button (Android)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|MRO Workpackage revoke confirmation button (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
On both clients, a Task can be reverted by clicking twice on the Not Applicable button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Therefore, clicking the value on the shown task opens an editor to enter the desired value. If no value was entered before, an empty line will be shown. Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). An additional small value indicator below the main value can report e.g. the previously entered value. The behaviour of this previous value indicator has to be specified separately in the customizing.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Measurment Task Empty UWP.png|Measurement Task without a reported value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a reported value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a reported value (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
There is also an [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] available for progress tasks.{{Version/WinXSince|2.5.4}}&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Progress Task UWP.png|Progress Task with a reported work progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with a reported work progress and a previous progress(Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Unfinished MRO CheckTask (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable MRO CheckTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Finished Inspection Task UWP.png|Finished MRO InspectionTask (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished MRO InspectionTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|sequential task classification]] allows you to pre-define a sequence in which tasks are to be resolved by users. This means that it is required for one or multiple tasks to be finished in order for other tasks to become &amp;quot;unlocked&amp;quot; and editable. A task can have any number of &amp;quot;predecessors&amp;quot;. Predecessors are the tasks that are required to be finished first.&lt;br /&gt;
&lt;br /&gt;
A task can have predecessors that live anywhere else in the object hierarchy. It is not necessary for a task and its predecessors to be part of the same work package, even though this is likely the most common use case.&lt;br /&gt;
&lt;br /&gt;
The state of a sequential task is evaluated both offline and online to get the best possible user experience. The user will see dependent tasks update immediately if their successors were finished, if those tasks are currently visible in the UI. There is 1 case in which the server-side state will override the client-side (offline) evaluation, discussed below.&lt;br /&gt;
The state of each sequential task is evaluated the following way:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says the task is open, we consider this as the truthful state and don't do any other evaluation.&lt;br /&gt;
# Check if the task has any predecessors.&lt;br /&gt;
# Try to load each predecessor task.&lt;br /&gt;
#* If loading of any predecessor fails (the object is not available offline), the task will be locked.&lt;br /&gt;
# If all predecessor tasks are finished, the task is open and can be edited. Otherwise, the task is locked.&lt;br /&gt;
&lt;br /&gt;
The customizer setting up the task dependency relations needs to ensure that the dependencies are not cyclical. In this case, it would be impossible for any tasks in the &amp;quot;cycle&amp;quot; to be finished.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
As a demonstration of this feature, see [[Media:Sequential_tasks_winx.mp4|this video]]. The relations between tasks are defined as in [[Media:Task_relations.png|this image]], starting at A1 and A2, which are not dependent on any other tasks. The lines (from left to right) indicate dependencies. This means that B2 has tasks A1 and A2 as its predecessors, for example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
Sometimes, not all tasks have to be finished. More specifically, there might be a predefined condition where you only need to finish a certain number of tasks among a group of them. These are known in {{UBIK}} as [[MROCLS_GROUPEDTASK|grouped tasks]].&lt;br /&gt;
&lt;br /&gt;
The idea is, a group of tasks can be defined as siblings to each other and they also share the same server configured threshold. When the number of finished tasks among that group exceeds the threshold, the entire group is considered as no longer necessary. When reflected in the overall status of the task owner(s), these tasks would appear as if they are finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, the finished status is completely independent from the not necessary status on a task. A grouped task which is no longer necessary can be both finished or not yet finished. In other words, users don't have to finish a not necessary grouped task, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation for grouped tasks and their task owners requires the knowledge of all siblings tasks. Imagine 2 out of 3 tasks must be finished but the client only knows 1 in total and the others are only available at the server at that time. This makes it impossible to draw conclusions whether the task(s) should be necessary or not. Under such circumstances, the local status calculation is done as if these are just regular tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|Like with the other MRO objects, the client always chooses the best available statuses for grouped tasks to present to the users. More specifically, it uses the statuses calculated by the server when the client is not offline and there are no uncommitted local changes on the involved objects. Otherwise, it uses the statuses calculated locally to the best of its knowledge.}}&lt;br /&gt;
&lt;br /&gt;
A task can also be a grouped and a sequential one at the same time. In such a case, the grouped nature of the sibling tasks will affect the way the task sequence completes.&lt;br /&gt;
&lt;br /&gt;
For example, task A1, A2 and A3 are 3 grouped sibling tasks and only 1 of them needs to be finished. At the same time, they are all predecessors of task B. Normally, all predecessors must be finished (and locked) before task B becomes the next one in the sequence and therefore unlocked. In this case, however, as soon as one of the predecessors is finished, all three become unnecessary (and locked) and task B unlocks as a result of that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Supervisor Task {{Version/XamarinSince|4.8}} ====&lt;br /&gt;
As the name suggests, supervisor tasks are those that must be finished under supervision. When users want to finish a [[MROCLS_MRO_SUPERVISOR_TASK|supervisor task]], they must hand over their work devices to a supervisor. The latter checks the work status and scans an NFC tag if the work is approved. If the [[MROCLS_MRO_SUPERVISOR|supervisor]] has sufficient permissions for the task and the correct supervisor PIN is given, the task gets unlocked and the users can proceed to finish it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300px heights=300px&amp;gt;&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Before_Verification.jpg|Supervisor Task Before Verification/Unlocking (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor Task Enter PIN (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Task After Verification/Unlocking (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A thing to note is that while the need to verify a supervisor task can be seen as a type of locking, it's certainly not the only reason for a [[Locked_Objects|locked object]]. This means a supervisor task can remain locked (although for different reasons) even after a supervisor has successfully verified it. This can often be the case if you use it in combination with other features such as [[MRO_Objects_(Client)#Sequential_Task|sequential tasks]], [[User_Rights|user rights]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For security reasons, the verification process is cancelled if the supervisor enters the wrong PIN for three times. Scanning the tag again is required in that case.}}&lt;br /&gt;
{{Hint|A setting controls [[RFID_tags#Choose_which_information_to_use_from_a_tag|which information in a scanned tag is used]] during this process.}}&lt;br /&gt;
&lt;br /&gt;
==== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
The Signature Task is a task type that is completed by capturing a handwritten signature from the user. The task contains an editor field that serves as the entry point for the signing process. When the user clicks (or taps) on the editor field, a signature dialog opens. Within this dialog, the user can provide their signature. After confirming the input, the signature is saved and the task is automatically marked as completed.&lt;br /&gt;
&lt;br /&gt;
If the task is signed while the client is online:&lt;br /&gt;
* The User (signee) is resolved immediately by the server and displayed.&lt;br /&gt;
* The ValidationTimestamp is generated and displayed.&lt;br /&gt;
* Both values are shown directly in the editor field after signing.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The User only gets resolved by the server and displayed once you're in online mode}}&lt;br /&gt;
&lt;br /&gt;
If the displayed User and/or ValidationTimestamp cannot be fully shown due to limited space in the editor field, the complete information can be accessed via a Popup.&lt;br /&gt;
To show the Popup displaying the full User and ValidationTimestamp without truncation, click on the editor field.&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;br /&gt;
&lt;br /&gt;
==== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICTURE_TASK|picture task]] is a check task which can only be finished when it has at least one child document containing a valid file. In the UI, an additional photo button is presented next to the check so users can easily take photos before finishing the tasks.&lt;br /&gt;
* As any other objects, picture tasks can carry and display [[SYSCLS_CHILDINFOOWNER|child count information]]. But that is not a mandatory part of the feature. Even when it's not configured and not visible in the UI, you can still finish the tasks.&lt;br /&gt;
* In WinX/UWP, the UI also presents an expander which allows you to display the child documents of picture tasks. This is not present by default in the Mobile app due to the screen size limit but [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|can be easily customized]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|The task is named as such because pictures are the most commonly used types, but the child documents can be of other types as well. }}&lt;br /&gt;
&lt;br /&gt;
When a user tries to finish a picture task by tapping the check, the app might perform some data synchronization first if in online mode, which includes&lt;br /&gt;
* Syncing the child objects (including documents) of the task.&lt;br /&gt;
* Downloading the file(s) of the child documents.&lt;br /&gt;
During data synchronization, the check button on that task turns into a wait indicator. Afterwards, the app checks if the prerequisites to finish the task are met.&lt;br /&gt;
* If there are no child documents or no local files for the child documents, the task remains unfinished and the user gets informed about the reasons.&lt;br /&gt;
* Otherwise, the task gets finished and the photo button gets disabled.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Setting NA (not applicable) on a picture task is always possible, regardless of the condition of child documents.}}&lt;br /&gt;
&lt;br /&gt;
==== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_NUMERIC_TASK|numeric task]] is a task which records a double value (e.g. from a temperature sensor). Entering the value (including Not Applicable) completes the task.&lt;br /&gt;
* The value is compared against an accaptable value range which is not editable on the client.&lt;br /&gt;
* Deviation from this range results in visual feedback as well as the [[#Tech Status|tech status]] being set to display an issue.&lt;br /&gt;
* If the configured value range is invalid (e.g. min &amp;gt; max) and the user enters a value, the [[#Tech Status|tech status]] will also be set to display an issue.&lt;br /&gt;
* A numeric task also has a special value unit that can be set per task instance. If set, it overrides the standard value unit defined on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
==== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICK_LIST_TASK|Pick List task]] looks and behaves the same like a standard Integer Task with SelectiveList. Other than the standard Integer Task, the Pick List Task has an [[UBIK_Active_Lists|Active List]] defined on instance level to pick from for its value property. The task counts as finished as soon as a list item has been selected, or when pressing ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MRO objects with project information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Info (WinX)]]&lt;br /&gt;
An MRO object (except tasks) might also bring along [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information together with the MRO progress are displayed in a bar chart. The start &amp;amp; end dates of the MRO object are displayed on the progress bar. The length and the position of the progress bar, together with the current date mark indicate the timeline.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
When an (MRO) object is locked, editing it becomes impossible. More details about [[Locked_Objects|locked objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MROCLS_PROJECT]]&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]]&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]]&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]]&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29807</id>
		<title>Mobile XAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29807"/>
				<updated>2026-05-07T10:19:05Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Known issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The User Interface of the Mobile Clients (Android, iOS, Windows) can be fundamentally customized using custom XAML definitions. This customization process is heavily influenced by the [[XAML|XAML Customization Process on the WinX Client]].&lt;br /&gt;
&lt;br /&gt;
= Basics =&lt;br /&gt;
There are predefined XAML templates available that can be customized. If no customizing is found, the default templates will be used.&lt;br /&gt;
&lt;br /&gt;
== Default XAMLs ==&lt;br /&gt;
All default XAML templates that can be customized are available through the Mobile Windows client. You need to go to the app settings and click the &amp;quot;Unpack default XAMLs&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== Differences to WinX/UWP ==&lt;br /&gt;
* Since it's based on the Mobile XAML dialect, you CANNOT use any existing XAML customizings for the WinX/UWP app;&lt;br /&gt;
* Namespace definitions must include the corresponding assembly names;&lt;br /&gt;
* XAML template files have the extension name of '''xamlx''' instead of '''xaml''';&lt;br /&gt;
* You can deploy only those resources that you want to customize. (This is also the case for newer versions of WinX/UWP. {{Version/WinXSince|3.6}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overriding default XAMLs=&lt;br /&gt;
On Windows (WinX/UWP), the &amp;lt;code&amp;gt;[App Package Folder]/LocalState/xaml/&amp;lt;/code&amp;gt; folder can be accessed by the user and the customized XAML files directly added. An alternative to this on all platforms (including Android, iOS, etc.) is to use the ''Import Customizing'' button in the app settings to import the templates, styles, images, etc. (file by file, or all files within a zip package). The changes should be reflected in the UI (except the current page) without restarting the app. After directly editing the customizings (Mobile Windows), you can also use the &amp;quot;Reload customizing&amp;quot; button without restarting the app.&lt;br /&gt;
&lt;br /&gt;
In the following, we're going to override the default light theme color of the app:&lt;br /&gt;
* Unpack the default XAMLs;&lt;br /&gt;
* Pick and deploy the default UBIKThemes.xamlx to the '''xaml''' folder inside the ''LocalState'' folder;&lt;br /&gt;
* Open it with the text editor of your choice and remove everything within the '''ResouceDictionary''' except &amp;lt;code&amp;gt;&amp;lt;Color x:Key=&amp;quot;UBIKLightThemeColor&amp;quot;&amp;gt;blue&amp;lt;/Color&amp;gt;&amp;lt;/code&amp;gt;;&lt;br /&gt;
* Save the changes and reload. You should see changes successfully implemented.&lt;br /&gt;
&lt;br /&gt;
{{Attention| For maintainability reasons, it's HIGHLY recommended to deploy only those XAML resources you want to override. For example, if you only want to customize the UBIKChildArea, don't deploy others like the UBIKMenuArea. If you only want to customize the UBIKChildItem, that's the only content you should include in the UBIKThemes.}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Templates ==&lt;br /&gt;
Custom templates can be added, just like on the WinX/UWP client. Make sure to include all '''namespace definitions''' (as attributes of the '''ContentView''' tag), otherwise the custom template will not load.&lt;br /&gt;
&lt;br /&gt;
Similar to the ''UBIKThemes.xamlx'' file, custom or overridden templates start with a &amp;lt;code&amp;gt;&amp;lt;ContentView&amp;gt;&amp;lt;/code&amp;gt; tag containing all '''namespaces'''. &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; takes a '''ResourceDictionary''' and contains resources like references to converters. Finally, &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; contains the actual layout content (it's best to start with a '''Grid'''). Again, don't forget to add namespaces that you need!&lt;br /&gt;
&lt;br /&gt;
Templates can also be defined in ''UBIKThemes.xamlx''. In this case, they need to be added into the &amp;lt;code&amp;gt;&amp;lt;ResourceDictionary&amp;gt;&amp;lt;/code&amp;gt; inside the &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; template as a &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt;. Similarly, if you want to split up the templates into seperate files, you need to make sure to follow the steps mentioned above and get the content of the &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt; into the &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
{{Attention|Templates defined in separate files will override templates defined in the ''UBIKThemes.xamlx''!}}&lt;br /&gt;
&lt;br /&gt;
=== Bindings in resources ===&lt;br /&gt;
When using bindings such as [[Xamarin_XAML#Content_filtering|this]] in a resource located in a custom template, it is necessary to place the template in a UBIKContentView.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, this is because bindable objects in the ResourceDictionary of a ContentView (the custom template) don't automatically inherit the BindingContext from the container/parent view. UBIKContentView is created to additionally do that.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- UBIKCustomView.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt... ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Container where UBIKCustomView is placed, e.g. UBIKChildArea.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;controls:UBIKContentView Content=&amp;quot;{Binding [UBIKCustomView], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding Images ==&lt;br /&gt;
Images can't be loaded with the default '''Image''' tag, as the image is on different paths on each operating system.&lt;br /&gt;
&lt;br /&gt;
Therefore, there's a custom '''FileImage''' that internally overrides the default ''Image'' with two custom parameters:&lt;br /&gt;
* '''FolderName''' ...The name of the '''folder''' in the '''local folder'''. Only the first level inside the ''LocalState'' folder seems to work.&lt;br /&gt;
* '''FileName''' ...The name of the '''file''' in the said folder. &lt;br /&gt;
&lt;br /&gt;
Make sure to implement the proper namespace as well by adding&lt;br /&gt;
&amp;lt;code&amp;gt;xmlns:fimage=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; into the root item's attributes.&lt;br /&gt;
&lt;br /&gt;
Then, the image can be loaded using:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fimage:FileImage FileName=&amp;quot;image.png&amp;quot; FolderName=&amp;quot;xaml&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This snipped loads the image called '''image.png''' located in the '''xaml''' folder inside the ''LocalState''.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the ''FileImage'' tag doesn't seem to support most attributes. Therefore place it inside a '''Grid''' to achieve a perfect layout.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Icons ==&lt;br /&gt;
Moved to article [[XAML_Tips#Custom_Icons]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Converters==&lt;br /&gt;
:''Main Page: [[Converters_In_Mobile]]''&lt;br /&gt;
&lt;br /&gt;
They are used to convert specific data into some desired output, using custom logic. &lt;br /&gt;
&lt;br /&gt;
Consider the following example:&amp;lt;br/&amp;gt;&lt;br /&gt;
A label saying ''There are no children items available!'' should only be visible if the number of children-items is 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Advanced =&lt;br /&gt;
&lt;br /&gt;
== Feature related ==&lt;br /&gt;
&lt;br /&gt;
=== Customizing Menu Button {{Version/XamarinSince|4.6.0}} === &lt;br /&gt;
&lt;br /&gt;
For the Mobile Client, it is possible to show/hide the '''Menu button''' of the client.&amp;lt;br&amp;gt;&lt;br /&gt;
To customize the visibility of the '''Menu button''' you have to edit the default XAML '''Themes''' file.&lt;br /&gt;
&lt;br /&gt;
* Search for &amp;quot;'''ShowMenuToolBar'''&amp;quot; in the Themes file.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If there isn't any &amp;quot;'''ShowMenuToolBar'''&amp;quot; in your XAML Themes file, you just have to create one, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Boolean x:Key=&amp;quot;ShowMenuToolBar&amp;quot;&amp;gt;true&amp;lt;/x:Boolean&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the value to &amp;quot;true&amp;quot; to show the '''Menu button''' (default value).&lt;br /&gt;
* Set the value to &amp;quot;false&amp;quot; to hide the '''Menu button'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
File:menu_button_show.png|Menu Button shown&lt;br /&gt;
File:menu_button_hiddenV3.png|Menu Button hidden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Content filtering ===&lt;br /&gt;
For the Mobile clients, an &amp;quot;SfDataSourceExt&amp;quot; type is available for filtering list of items using defined expressions.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following example demonstrates how to filter for child items having certain property values. The filtered list and its count can be displayed in the UI.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&lt;br /&gt;
    ...&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;x:String x:Key=&amp;quot;Expresssion&amp;quot;&amp;gt;Item.Values[&amp;amp;quot;MP_YEAR&amp;amp;quot;].Contains(&amp;amp;quot;2019&amp;amp;quot;)&amp;lt;/x:String&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt  x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource Expresssion}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; Unloaded=&amp;quot;{Binding SkipFiltering}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;StackLayout Orientation=&amp;quot;Vertical&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Label Text=&amp;quot;{Binding DisplayItemsCount, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;controls:SfListViewExt ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/StackLayout&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notes on using bindings in ResourceDictionary ====&lt;br /&gt;
In the example shown above, you can see &amp;lt;code&amp;gt;{Binding Children.Items}&amp;lt;/code&amp;gt; is used. For this to work, the SfDataSourceExt control inside the ResourceDictionary must inherit the binding data context properly.&lt;br /&gt;
* In this case, that data context comes from where this template (UBIKChildArea.xamlx) is used, namely the UBIKContentArea.xamlx;&lt;br /&gt;
* When referencing this template in a ContentView control, the binding data context is '''NOT''' automatically inherited by the controls inside the ResourceDictioinary;&lt;br /&gt;
* That's why we use a UBIKContentView control instead. You can find its example usage in the default UBIKContentArea.xamlx template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Search ===&lt;br /&gt;
In the default UBIKMenuArea.xamlx (where the search UI is hosted), there are two commands associated with two events. See below.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SearchBar ...&amp;gt;&lt;br /&gt;
    &amp;lt;SearchBar.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior&lt;br /&gt;
            Command=&amp;quot;{Binding FreeTextSearchCommand}&amp;quot;&lt;br /&gt;
            CommandParameter=&amp;quot;{Binding Path=Text, Source={x:Reference SearchField}}&amp;quot;&lt;br /&gt;
            EventName=&amp;quot;SearchButtonPressed&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding DelayedFreeTextSearchCommand}&amp;quot; EventName=&amp;quot;TextChanged&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/SearchBar.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/SearchBar&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;SearchButtonPressed&amp;lt;/code&amp;gt; is responsible for executing searches after the user confirms the input (e.g. pressing {{{keypress|Enter}}} or the search button).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;TextChanged&amp;lt;/code&amp;gt; is responsible for the &amp;quot;search as you type&amp;quot; behavior. Namely it triggers an automatic search shortly (half second) after the user stops changing the text in the search bar. It can be turned off by simply removing that particular behavior.&lt;br /&gt;
&lt;br /&gt;
=== DisplayViewCommand ===&lt;br /&gt;
This command can be used to [[Custom_View_(Client)|display custom views]].&lt;br /&gt;
&lt;br /&gt;
=== Flashlight  {{Version/MobileSince|5.1.0}}  ===&lt;br /&gt;
For the Mobile clients, it is possible to control the system flashlight via customizing and switch it on or off.&lt;br /&gt;
&lt;br /&gt;
The available properties can, for example, be bound to a Switch or CheckBox, as demonstrated below. These properties allow you to:&lt;br /&gt;
* Determine whether the device supports flashlight functionality (IsFlashSupported)&lt;br /&gt;
* Check whether the flashlight is currently turned on or off (IsFlashEnabled)&lt;br /&gt;
* Toggle the flashlight on or off via user interaction (SwitchFlashLight) &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If an attempt is made to enable the flashlight on a device that does not provide flashlight support, no action is performed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Switch&lt;br /&gt;
! controls:CheckBox&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Switch IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
        IsToggled=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:CheckBox&lt;br /&gt;
    x:Name=&amp;quot;PropertyToggle&amp;quot;&lt;br /&gt;
    CheckSymbol=&amp;quot;&amp;amp;#x1F526;&amp;quot;&lt;br /&gt;
    IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
    IsChecked=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKIconToggleButton}&amp;quot;&lt;br /&gt;
    SymbolSize=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger&lt;br /&gt;
            Binding=&amp;quot;{Binding AppStatus.IsFlashEnabled}&amp;quot;&lt;br /&gt;
            TargetType=&amp;quot;controls:CheckBox&amp;quot;&lt;br /&gt;
            Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Background&amp;quot; Value=&amp;quot;{StaticResource UBIKAccentColor}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
   &amp;lt;/controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:CheckBox&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
To get a good performance in the app UI when using your Xaml customizings, it is recommended to try the following.&lt;br /&gt;
* Always keep your UI structure simple. Choose the most efficient layouts for the scenarios and avoid unnecessary UI elements. Please refer to [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#choose-the-correct-layout &amp;quot;choose the correct layout&amp;quot;] and [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#reduce-the-visual-tree-size &amp;quot;reduce the visual tree size&amp;quot;];&lt;br /&gt;
* Turn on [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-compression layout compression] on wrapping elements that don't have any visual parameters set (reasons stated in the linked documentation).&lt;br /&gt;
{{Hint|There is a default &amp;quot;HeadlessLayout&amp;quot; style available in the app you can use on elements such as Grids, StackLayouts, ContentViews, etc. It turns on [[Xamarin_XAML#Layout_compression_examples|layout compression]] on the applied elements in Xamarin.Android (since we find it not worth the effort in Xamarin.iOS).}}&lt;br /&gt;
{{Attention|If possible, one should always favor designing the UI with less wrapping elements over turning on layout compression on unnecessary ones.}}&lt;br /&gt;
&lt;br /&gt;
=== General performance tips ===&lt;br /&gt;
* Reduce number of views per page&lt;br /&gt;
* Don’t bind things if they could be set static easily&lt;br /&gt;
* If you do not change the default, don’t set it explicit. For example, [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.StackLayout.Orientation?view=xamarin-forms Orientation of StackLayout] is “Vertical” by default. No need to set it manually if you don’t want to change it.&lt;br /&gt;
* Transparency is expensive.&lt;br /&gt;
* Do not put ListViews into ScrollViews.&lt;br /&gt;
* To stack elements, create a grid and add them to the same cell one after another. It’s cheaper than RelativeLayout.&lt;br /&gt;
* Use Margins instead of Paddings.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
* Choose correct Layout, e.g. no need to add a StackLayout if it only has 1 child.&lt;br /&gt;
* [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-options LayoutOptions].Fill or .FillAndExpand are best choice in most cases. And they are already default, so no need to set.&lt;br /&gt;
* Autosize of rows and columns in grids should used as few as possible.&lt;br /&gt;
* RelativeLayout is very expensive. Try to avoid.&lt;br /&gt;
* In StackLayout, make sure there is only 1 LayoutOptions Expand.&lt;br /&gt;
&lt;br /&gt;
=== Labels ===&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/text/label#formatted-text FormattedText] instead of multiple labels.&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.linebreakmode?view=xamarin-forms Linebreakmode] NoWrap (which is already the default).&lt;br /&gt;
* Avoid [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Label.VerticalTextAlignment?view=xamarin-forms VerticalTextAlignment]. Anyway, if needed, use VerticalTextAligment instead of &lt;br /&gt;
VerticalOptions.&lt;br /&gt;
* Use the &amp;quot;TextTransform&amp;quot; attribute to convert the value of the &amp;quot;Text&amp;quot; attribute to either uppercase or lowercase.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label&lt;br /&gt;
      TextTransform=&amp;quot;Uppercase&amp;quot;&lt;br /&gt;
      Text=&amp;quot;{Binding Properties.AllItems[DESCR].DisplayValue}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Images ===&lt;br /&gt;
* Provide images in optimized width and size. Provide multiple resolutions for different usage.&lt;br /&gt;
* Set [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Image.IsOpaque?view=xamarin-forms IsOpaque] to true if image is opaque.&lt;br /&gt;
&lt;br /&gt;
=== Layout compression examples ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource ChangedSymbol}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The code above removes one wrapping element added automatically by the ContentView and demonstrates a good reason to use layout compression because it can not be avoided otherwise.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid Margin=&amp;quot;2&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Margin=&amp;quot;5&amp;quot; Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This example, on the other hand, demonstrates a bad usage of layout compression because it can be easily achieved by better designs such as using only the Label with a merged margin.&lt;br /&gt;
&lt;br /&gt;
Sometimes the content inside a compressed layout appears on a wrong z-index level. For eample:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;BoxView CornerRadius=&amp;quot;14&amp;quot; HeightRequest=&amp;quot;28&amp;quot; WidthRequest=&amp;quot;28&amp;quot; Color=&amp;quot;Red&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource Badge}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView &amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
According to the order of the BoxView and the Label, the latter should appear on top of the former (later ones have higher z-index levels). However, this can be disturbed by layout compression, causing the exact opposite.&lt;br /&gt;
In this case, you can add a &amp;lt;code&amp;gt;xmlns:android=&amp;quot;clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core&amp;quot;&amp;lt;/code&amp;gt; namespace to your Xaml file and manually elevate the Label by specifying &amp;lt;code&amp;gt;android:VisualElement.Elevation=&amp;quot;X&amp;quot;&amp;lt;/code&amp;gt; on it accordingly (X is the delta of the z-index level you want).&lt;br /&gt;
&lt;br /&gt;
=== SfListViewExt ===&lt;br /&gt;
For performance reasons, we created an extended version of the Syncfusion SfListView control and it should be used for all lists in customizings. You need to add a namespace like &amp;lt;code&amp;gt;xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; to your Xaml file and use it like &amp;lt;code&amp;gt;&amp;lt;controls:SfListViewExt ... /&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{Hint|Technically speaking, SfListViewExt informs item view models when their corresponding item views appear on / disappear from the screen. This way, view models can skip a lot of unnecessary work (on the UI) when their views are not visible. '''If SfListView is used instead, the item views will not reflect content changes until the page is reloaded/refreshed.'''}}&lt;br /&gt;
&lt;br /&gt;
It is possible to configure the ListView, that the ScrollPosition is remembered when navigating away from the page, to do so, the property RembemberScrollPosition needs to be set to true. If unset, the value defaults to false and the scroll positions are not remembered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt RememberScrollPosition=&amp;quot;True&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using multiple Lists on one page (e.g. in a TabbedView), it is necessary to set the AutomationId property uniquely for each list on the page, to support the remembering of the ScrollPosition.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delay and LazyLoading ===&lt;br /&gt;
{{Attention|Although both properties can be set in XAML on the two controls, this should not be done. When both the LazyLoading and Delay properties are set, the Delay property is ignored in the code-behind, as otherwise it could lead to unexpected behavior and, in the worst case, result in performance degradation.}}&lt;br /&gt;
&lt;br /&gt;
==== Delay in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
More complex UIs create a delay in rendering which leads to a feeling of &amp;quot;unresponsiveness&amp;quot; when navigating through the client. This is because the app loads and displays everything at once, leading to a larger delay between triggering navigation and completion of page loading.&lt;br /&gt;
 &lt;br /&gt;
While the complexity of the UI directly affects the time taken to render it, the experience of responsiveness can be somewhat improved by actually adding a delay between the loading of the content page, and actual data content (properties, children, etc). By not loading both at once, resources are freed up in the app, leading to a quicker loading of the basic page. The content then loads in at its normal speed.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Starting from version 5.1, a small delay was introduced in the content heavy pages (child page, document page and query page). However, additional delays can also be applied to the custom UI at will, using a new property added to two existing controls used to insert UI templates: UBIKContentView and ContentControl. You can specify a delay (in milliseconds) on both controls so that the content of them is loaded after that amount of time. Examples are shown below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:ContentControl &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    ContentTemplate=&amp;quot;{Binding [UBIKNavigationBar], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hint|The delay won't have any effect if you specify the Content of the UBIKContentView control instead of its Converter, because the Content is immediately laid out by the XAML framework that way. If you don't need a converter to determine the actual template name dynamically, you can still use the TemplateConverter and specify the template name like the following so that the delay applies.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay applies ✅&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; ConverterParameter=&amp;quot;UBIKChildArea&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay doesn't apply ❌&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Content=&amp;quot;{Binding [UBIKChildArea], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Lazy Loading in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
To further improve performance, it is now possible to apply LazyLoading to UBIKContentView and ContentControl. &lt;br /&gt;
&lt;br /&gt;
When a ContentTemplate is assigned to either of these controls and the LazyLoading property is set to true, the content is only loaded when it is explicitly requested. The difference between this and simply controlling the IsVisible condition is that in the latter, resources are still consumed in constructing the UI element, even though it is not shown. Note that Lazy loading requires a trigger to determine when the content should be loaded, and the biggest benefit is experienced when complex elements, especially those hosting a ListView or some kind of object/property collection, are lazy-loaded. &lt;br /&gt;
&lt;br /&gt;
UBIKTabView is optimized to make use of the LazyLoading attribute when it is applied to tab content. Additionally, usage outside of UBIKTabView is possible, as the loading can be triggered as a behavior attached to any other control, such as a button with an IsClicked behavior handler. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UBIKTabView with LazyLoading'''&lt;br /&gt;
&lt;br /&gt;
When used in combination with UBIKTabView (by including the LazyLoading=True attribute on any UBIKContentView or ContentControl content of a tab item, as is now standard {{Version/MobileSince|5.1}}), only the content of the selected tab is rendered (by default, the first tab). The content of non-selected tabs is not. When switching tabs, UBIKTabView takes care of triggering the rendering of the content for the newly selected tab. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView &lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; &lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKPropertyArea&amp;quot; &lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:ContentControl &lt;br /&gt;
            ContentTemplate=&amp;quot;{DynamicResource MyTemplate}&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Using another control as a trigger for lazy loading'''&lt;br /&gt;
&lt;br /&gt;
Other controls (e.g., Button, CheckBox, etc.) can also serve as triggers for lazy loading. The benefit of this is that LazyLoading can still be applied to a complex UBIKContentView or ContentControl that is not hosted within a UBIKTabView. &lt;br /&gt;
&lt;br /&gt;
And example of a usecase is a togglebutton that reveals a section of content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
    &amp;lt;Grid RowDefinitions=&amp;quot;*,50,*&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView x:Name=&amp;quot;ChildContainer&amp;quot; Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;Button&lt;br /&gt;
            x:Name=&amp;quot;LoadDocuments&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;1&amp;quot;&lt;br /&gt;
            HeightRequest=&amp;quot;50&amp;quot;&lt;br /&gt;
            HorizontalOptions=&amp;quot;Center&amp;quot;&lt;br /&gt;
            Text=&amp;quot;LazyLoadDocuments&amp;quot;&lt;br /&gt;
            WidthRequest=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;Clicked&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;behaviors:InvokeMethodAction MethodName=&amp;quot;TriggerLazyLoad&amp;quot; TargetObject=&amp;quot;{Binding Source={x:Reference DocumentsAreaLoader}}&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;/Button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;controls:UBIKContentView&lt;br /&gt;
            x:Name=&amp;quot;DocumentsAreaLoader&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;2&amp;quot;&lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot;&lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKDocumentArea&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Known issues =&lt;br /&gt;
&lt;br /&gt;
=== Headlesslayout style in custom UBIKThemes causing problems ===&lt;br /&gt;
&lt;br /&gt;
In our default '''UBIKThemes''', we are currently using this style for a headless layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;HeadlessLayout&amp;quot; TargetType=&amp;quot;Layout&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;CompressedLayout.IsHeadless&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Setter.Value&amp;gt;&lt;br /&gt;
            &amp;lt;OnPlatform&lt;br /&gt;
                x:TypeArguments=&amp;quot;x:Boolean&amp;quot;&lt;br /&gt;
                Android=&amp;quot;True&amp;quot;&lt;br /&gt;
                WinPhone=&amp;quot;False&amp;quot;&lt;br /&gt;
                iOS=&amp;quot;False&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Setter.Value&amp;gt;&lt;br /&gt;
    &amp;lt;/Setter&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
This style is used for better UI performance on Android.&lt;br /&gt;
Using this style in a '''custom UBIKThemes''' could cause an exception &amp;amp; an app crash, or some objects to disappear.&lt;br /&gt;
The best case would be to '''not''' include it in the custom themes file, as it's unnecessary if you don't want to make any changes here.&lt;br /&gt;
&lt;br /&gt;
'''This issue is only known on Android tablet devices.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataTrigger Issues ===&lt;br /&gt;
==== Conflicting Triggers ====&lt;br /&gt;
DataTriggers in Mobile function better than the equivalent DataTriggerBehavior in UWP as they automatically handle the opposite case when a Boolean attribute value is set. This means that if a boolean DataTrigger is set, such as IsVisible=True, the False visibility will automatically be set if the Binding/Value condition is not met.&lt;br /&gt;
&lt;br /&gt;
However, this means that stacking multiple DataTriggers on the same attribute can lead to unexpected results. For this reason, it is recommended to use as few DataTriggers as possible. &lt;br /&gt;
* Avoid setting the same attribute more than once; do not set the same value as a default attribute and in the DataTrigger (ControlTemplate in the below example).&lt;br /&gt;
* Ideally, use only DataTriggers without a default ControlTemplate. This ensures that content is created only after the trigger evaluation is complete. If a default ControlTemplate is set, it is always loaded immediately, even if another template is applied right after.&lt;br /&gt;
* It is acceptable, but not recommended, to combine a single DataTrigger with an opposite default value, but only if the default value is different from all values set in triggers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Don't Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Instead Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Acceptable, but not recommended&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== DataTrigger to set Footer Properties in a ListView ====&lt;br /&gt;
&lt;br /&gt;
When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases.&lt;br /&gt;
It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty.&lt;br /&gt;
&lt;br /&gt;
If you encounter such an issue, please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger.&lt;br /&gt;
Also, new customizings should consider this workaround as a preventive action.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK IN CERTAIN CASES --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Incorrect glyphs may be shown on buttons ===&lt;br /&gt;
&lt;br /&gt;
When using glyphs on buttons in Mobile, sometimes a different glyph than the expected one will show up when viewing the app on Android.&lt;br /&gt;
They only seem to appear incorrectly when used as the Text property of the button (with FontFamily set to UBIKSymbols, such as the UBIKIconButton style.)&lt;br /&gt;
&lt;br /&gt;
If you encounter this issue please workaround by supplying the icon through the FontImageSource property of the button.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding BulkOperation.InvokeOnItemsCommand}&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;Button.ImageSource&amp;gt;&lt;br /&gt;
          &amp;lt;FontImageSource &lt;br /&gt;
               FontFamily=&amp;quot;{DynamicResource UBIKSymbols}&amp;quot;&lt;br /&gt;
               Glyph=&amp;quot;{x:Static resources:UBIKIcons.MobileDelete}&amp;quot;&lt;br /&gt;
               Color=&amp;quot;{DynamicResource UBIKDarkThemeColor}&amp;quot;&lt;br /&gt;
               Size=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.ImageSource&amp;gt;&lt;br /&gt;
     &amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
          &amp;lt;classes:KeyValueList&amp;gt;&lt;br /&gt;
                    &amp;lt;classes:KeyValueParameter Key=&amp;quot;Command&amp;quot; Value=&amp;quot;DiscardContentCommand&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/classes:KeyValueList&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Buttons and gesture recognizers ===&lt;br /&gt;
In Mobile XAML, you can use gesture recognizers on many UI elements such as a Grid to enable the latter to interact with user inputs.&lt;br /&gt;
&lt;br /&gt;
However, we've already made quite a lot of experience that gesture recognizers do not always work on Android and iOS when used on a Button control.&lt;br /&gt;
For example, the following Button won't properly invoke the command on said platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK!!! --&amp;gt;&lt;br /&gt;
&amp;lt;Button ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.GestureRecognizers&amp;gt;&lt;br /&gt;
        &amp;lt;TapGestureRecognizer Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.GestureRecognizers&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Therefore, you should always seek alternatives for Buttons.&lt;br /&gt;
'''If only one command is needed''', use the standard Command property on the Button, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; .../&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Or if multiple commands are needed, use Behaviors '''instead''', e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS ALSO WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button xmlns:behaviors=&amp;quot;clr-namespace:UBIK.CPL.Behaviors;assembly=UBIK.CPL&amp;quot; ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding NavigateBackCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== No dynamic reloading of Document Viewer ===&lt;br /&gt;
[[File:PDFViewerFixWiki.JPG]]&lt;br /&gt;
&lt;br /&gt;
In a customizing that combines a single-selection list of documents with some kind of viewer (especially UBIKDocumentContentArea), it is generally the case that switching the document causes the document viewer to then appear blank. The technical reason is that the PDFViewer used in the UBIKDocumentContentArea is not reloaded once the document content is reloaded. &lt;br /&gt;
&lt;br /&gt;
An easy fix is to apply a DataTrigger that unloads the ContentView when the document content is null, as the ContentView is forced to rerender itself when the trigger condition is no longer met.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Document Viewer --&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    x:Name=&amp;quot;DoucmentViewer&amp;quot; &lt;br /&gt;
    BindingContext=&amp;quot;{Binding SelectedItem, Source={x:Reference DocumentList}}&amp;quot;&lt;br /&gt;
    Content=&amp;quot;{Binding [UBIKDocumentContentArea], Source={x:Static services:TemplateService.Instance}}&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger TargetType=&amp;quot;controls:UBIKContentView&amp;quot; Binding=&amp;quot;{Binding SelectedItem.DocumentViewModel.DocumentContent, Source={x:Reference DocumentList}, Converter={StaticResource NullToBool}}&amp;quot; Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Content&amp;quot; Value=&amp;quot;{x:Null}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Issues with SfPullToRefresh in Mobile client {{Version/MobileSince|5.0}} ===&lt;br /&gt;
Due to a third-party issue, problems may occur on Mobile Android when using the SfPullToRefresh control in combination with the SfListViewExt. This can result in e.g. navigation or task interaction sometimes requiring multiple clicks.&lt;br /&gt;
In general, and due to more issues, it's not recommended to use the SfPullToRefresh control.&lt;br /&gt;
In our Mobile standard client, the PullToRefresh control has been replaced by a Refresh button in the Context Menu.&lt;br /&gt;
If you still decide to use SfPullToRefresh, there are a few points to consider:&lt;br /&gt;
&lt;br /&gt;
==== Avoid multiple SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue that causes the app to freeze, avoid placing more than one SfPullToRefresh controls as siblings in a xaml hierarchy. If switching between contents in a SfPullToRefresh control is necessary use separate DataTemplates for the contents and use e.g. a DataTrigger to set one of them as the ControlTemplate of a ContentControl inside the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_multiple_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
==== Avoid using SyncFusion ListViews directly in SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue on some Android devices that can cause some items in a SfListViewExt to be rendered incorrectly or not at all after triggering a PullToRefresh, avoid placing a SfListViewExt directly in a SfPullToRefresh control. Instead, wrap the ListView in a DataTemplate and use it in a ContentControl as a child of the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_using_SyncFusion_ListViews_directly_in_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tooltips not supported on mobile iOS devices {{Version/MobileSince|5.0}} ===&lt;br /&gt;
On iOS, native tooltips are only supported under very specific conditions. According to the official [https://learn.microsoft.com/en-us/dotnet/maui/user-interface/tooltips?view=net-maui-10.0| Microsoft documentation], tooltips are only shown when running the app on macOS with a pointer device. On physical iPhones and iPads, tooltips are generally not displayed. This means that using ToolTipProperties in XAML will not work reliably on iOS mobile devices.&lt;br /&gt;
&lt;br /&gt;
A possible workaround is to simulate tooltip behavior using a [https://help.syncfusion.com/maui/popup/overview| SfPopup control]. The idea is to use a tap interaction on the UI element (e.g., via a ''TappedBehavior'' with a ''SetPropertyAction'') that opens a Popup positioned relative to that element, and to automatically close the Popup after a short duration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- AFTER WORKAROUND --&amp;gt;&lt;br /&gt;
xmlns:sfPopup=&amp;quot;clr-namespace:Syncfusion.Maui.Popup;assembly=Syncfusion.Maui.Popup&amp;quot;&lt;br /&gt;
xmlns:behaviors=&amp;quot;clr-namespace:UBIK.MAUI.Behaviors;assembly=UBIK.MAUI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sfPopup:SfPopup&lt;br /&gt;
    x:Name=&amp;quot;TooltipTextPopup&amp;quot;&lt;br /&gt;
    AutoCloseDuration=&amp;quot;3000&amp;quot;&lt;br /&gt;
    RelativePosition=&amp;quot;AlignTop&amp;quot;&lt;br /&gt;
    RelativeView=&amp;quot;{x:Reference YourUIElement}&amp;quot;&lt;br /&gt;
    ShowHeader=&amp;quot;False&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;sfPopup:SfPopup.ContentTemplate&amp;gt;&lt;br /&gt;
        &amp;lt;DataTemplate&amp;gt;&lt;br /&gt;
                &amp;lt;Label Text=&amp;quot;This will be displayed as Tooltip text&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;
    &amp;lt;/sfPopup:SfPopup.ContentTemplate&amp;gt;&lt;br /&gt;
&amp;lt;/sfPopup:SfPopup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Border x:Name=&amp;quot;YourUIElement&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Border.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:TappedBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;behaviors:SetPropertyAction&lt;br /&gt;
                PropertyName=&amp;quot;IsOpen&amp;quot;&lt;br /&gt;
                TargetObject=&amp;quot;{Binding Source={x:Reference TooltipTextPopup}}&amp;quot;&lt;br /&gt;
                Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviors:TappedBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Border.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BEFORE WORKAROUND --&amp;gt;&lt;br /&gt;
&amp;lt;Border x:Name=&amp;quot;YourUIElement&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ToolTipProperties.Text&amp;gt;&lt;br /&gt;
         This will NOT be shown on iOS&lt;br /&gt;
    &amp;lt;/ToolTipProperties.Text&amp;gt;&lt;br /&gt;
&amp;lt;/Border&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
= UBIK Go (Maui) Customizing Guide {{Version/MobileSince|5.1}} =&lt;br /&gt;
The change to Maui was taken as an opportunity both to visually update the client's default UI, and to add some quality of life changes aiming to reduce the amount of customizing needed.&lt;br /&gt;
&lt;br /&gt;
This section describes the standard UI and how to more easily customize it.&lt;br /&gt;
&lt;br /&gt;
For differences between Xamarin and Maui, please refer to the [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] article.&lt;br /&gt;
&lt;br /&gt;
== XAML Changes And Improvements ==&lt;br /&gt;
=== Styles and Resources ===&lt;br /&gt;
* Various color elements were renamed for neutrality. This will help clarify the purpose of color themes, and make it easier to keep track of in customizings. The old versions are still available but moved to the Obsolete section of UBIKThemes. &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKDarkTextColor --&amp;gt; UBIKRegularTextColor&lt;br /&gt;
UBIKDarkThemeColor --&amp;gt; UBIKMainThemeColor&lt;br /&gt;
UBIKLightTextColor --&amp;gt; UBIKMainThemeContrastColor&lt;br /&gt;
UBIKLightThemeColor --&amp;gt; UBIKBasePageColor&lt;br /&gt;
UBIKSubtleTextColor --&amp;gt; UBIKMediumTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Furthermore, effort was made to create 'contrast pairs' throughout the client; for example, UBIKMainThemeContrastColor is defined primarily for texts layered on elements of UBIKMainThemeColor (such as the title bar and text). &lt;br /&gt;
** The intention here is that this pair can be safely customized with no surprises, that cannot be guaranteed when using non-paired resource. For example, UBIKMainThemeContrastColor  and UBIKBasePageColor are both white in the default customizing, but if UBIKBasePageColor that were to be layered over UBIKMainThemeColor, it would result in a black-on-black issue in a dark theme customizing. &lt;br /&gt;
** The 'pairs' are; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKMainThemeColor x UBIKMainThemeContrastColor&lt;br /&gt;
UBIKBasePageColor x UBIKRegularTextColor&lt;br /&gt;
UBIKButtonColor x UBIKButtonTextColor &lt;br /&gt;
UBIKButtonToggledColor x UBIKButtonToggledTextColor &lt;br /&gt;
UBIKPDFBaseColor x UBIKPDFTextColor&lt;br /&gt;
UBIKPDFSelectedToolColor x UBIKPDFSelectedToolTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* An effort was also made to avoid hardcoding numeric values on the client. Reusable resources were introduced instead; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonIconSize&amp;quot;&amp;gt;20&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonPanelSize&amp;quot;&amp;gt;56&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonSize&amp;quot;&amp;gt;44&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKListItemSize&amp;quot;&amp;gt;80&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKTileItemSize&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;120&amp;quot; Phone=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKCaptionTextSize&amp;quot;&amp;gt;14&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKBodyTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKTitleTextSize&amp;quot;&amp;gt;18&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKProgressBarHeight&amp;quot;&amp;gt;4&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptivePadding&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;8,0&amp;quot; Phone=&amp;quot;4,0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptiveSpacing&amp;quot; x:TypeArguments=&amp;quot;x:Double&amp;quot; Default=&amp;quot;16&amp;quot; Phone=&amp;quot;8&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regarding corporate colors, there are now additional resources to customize, aside from UBIKAccentColor;&lt;br /&gt;
** UBIKHighlightColor is a secondary accent color used for highlighting (eg. Multiselect mode or edited Property). {{Version/MobileSince|5.1.0.0}} Transparency has been added to the UBIKHighlightColor.&lt;br /&gt;
** UBIKGradientColor {{Version/MobileSince|5.1.0.0}} is used in combination with UBIKAccentColor to form a gradient on the Authentication area.&lt;br /&gt;
* As in WinX {{Version/WinXSince|4.0}}, the various possible object status indicators were exported to a template called '''StatusIndicators''' located in UBIKThemes. These are now displayed at the top right of the item template, with a semi-opaque underlay in case the indicators appear over Title/SubTitle text.&lt;br /&gt;
* '''SfTextInputLayout''' was introduced and is used in various locations (Authentication, and properties).&lt;br /&gt;
* Default values for size, font, color, etc, were applied to various controls (Picker, Entry etc) for consistency.&lt;br /&gt;
* New '''SfListView''' styles were introduced and the originals moved to the Obsolete section.&lt;br /&gt;
** The listview now has a background color (UBIKMediumElementColor) and child item templates are now responsible for providing their own background color (UBIKBasePageColor that is applied to the Grid style UBIKItemBase). &lt;br /&gt;
*** The intention is to provide visual distinction from actual list items and empty list 'space'.&lt;br /&gt;
*** However, this will interfere with lists that rely on the SelectionBackground to highlight selection. This is solved in various ways throughout the UI, such as the SelectedIndicator used in UBIKChildItem, or the seperate SelectedItem and SelectedItemTemplate templates used in UBIKEditGuid.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Adaptivity ===&lt;br /&gt;
- tbd.&lt;br /&gt;
&lt;br /&gt;
=== Layout and Functionality ===&lt;br /&gt;
* '''UBIKNavigationBar''' was introduced as a templatable alternative to the hardcoded context menu (accessed by the '...' button in the top right of the content area) and is fully customizable.&lt;br /&gt;
* Shadowed panels were introduced in place of floating buttons in the content tabs (Children, Properties). For consistency, both are located at the top of their respective tab content.&lt;br /&gt;
* '''UBIKChildItem''' was visually simplified. It now displays a simple icon, the Title (and MRO progress, if any) and Subtitle, and StatusIndicators in the top right. The progressbar is now displayed across the bottom of the item.&lt;br /&gt;
* '''UBIKTaskItem''' was completely redesigned. &lt;br /&gt;
** Aside from the StatusIndicators that appear in the top right uniformly on any context object, MRO-related ones (Task status (Finished, NA, or Not Necessary, Group Limit and Size, Previous Value, and Tech Indicator) appear on the top left contained in an SfChipGroup. &lt;br /&gt;
** The main area of the task item is previously split between Title and task-related input. On smaller devices or in editing regardless of screen size, the input area sizes becomes larger.&lt;br /&gt;
** The task related input now looks visually distinct with and without a value. UBIKButton(Text)Color is used for 'new' tasks, while UBIKButtonToggled(Text)Color is used for the 'value filled' state.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
* '''UBIKRootItem''' (formerly UBIKMainItem) was introduced simply so that the Title, Area, and Item are organized together within the default and customizing folders. For compatibility, UBIKMainItem still exists in the default folder, however, be aware that the listview in UBIKRootArea now requests UBIKRootItem as the ItemTemplate by default.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Customizing Guides ==&lt;br /&gt;
=== Dark Theme ===&lt;br /&gt;
While UBIK Go does not include a Dark Theme by default, a lot of effort was invested in optimizing the color resources used throughout the app, so that a dark theme can be quickly customized. Furthermore, below is a list of recommended changes that result in a functional dark theme.&lt;br /&gt;
&lt;br /&gt;
'''In UBIKThemes:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;x:String x:Key=&amp;quot;TextFontFamily&amp;quot;&amp;gt;InterL&amp;lt;/x:String&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the value for TextFontFamily with &amp;quot;InterL&amp;quot;; It is recommended to use a thinner font as white on black looks bolder than the inverse.&lt;br /&gt;
A 'Light' version of the default font font was added and can be accessed using the tag InterL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKRegularTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMediumTextColor&amp;quot;&amp;gt;#A3ffffff&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBasePageColor&amp;quot;&amp;gt;#3a3a3c&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMainThemeColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBorderColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKElementColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKLightElementColor&amp;quot;&amp;gt;#222124&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKFinishedElementColor&amp;quot;&amp;gt;#2a2a2b&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKOverlayElementColor&amp;quot;&amp;gt;#3D000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKImageOverlayColor&amp;quot;&amp;gt;#A3000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt; &lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledTextColor&amp;quot;&amp;gt;Black&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolTextColor&amp;quot;&amp;gt;#292929&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFBaseColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the above color resources (or similar).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Shadow&lt;br /&gt;
        x:Key=&amp;quot;UBIKPanelShadow&amp;quot;&lt;br /&gt;
        Brush=&amp;quot;Black&amp;quot; ... /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change the value for the attribute Brush to &amp;quot;Black&amp;quot; to darken the panel shadows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;&amp;gt;#636365&amp;lt;/Color&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;UBIKProgressBar&amp;quot; TargetType=&amp;quot;controls:ProgressBar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;StatusColor&amp;quot; Value=&amp;quot;{Binding ClassificationHandler.StatusColor, Converter={StaticResource IntToColor}, ConverterParameter={StaticResource UBIKProgressBarUndefinedStatuscolor}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The light theme uses UBIKElementColor for the progress bar color when none is defined on the server. However, this does not invert well in a dark theme. Therefore a new color resource should be introduced (&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;) and used in the ConverterParameter of the IntToColor converter, which does not accept a color hex code directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''In UBIKSplashArea:'''&lt;br /&gt;
&lt;br /&gt;
Follow the instructions embedded within the file to replace the splash image with a custom logo. Alternatively, simply adapt the Source attribute of the Image control to &amp;quot;splashlogoinverse.png&amp;quot; to apply an inversion of the UBIK Go logo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Increased FontSize ===&lt;br /&gt;
tbd.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29806</id>
		<title>Mobile XAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29806"/>
				<updated>2026-05-07T08:49:55Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Tooltips not supported on some iOS devices {{Version/MobileSince|5.0}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The User Interface of the Mobile Clients (Android, iOS, Windows) can be fundamentally customized using custom XAML definitions. This customization process is heavily influenced by the [[XAML|XAML Customization Process on the WinX Client]].&lt;br /&gt;
&lt;br /&gt;
= Basics =&lt;br /&gt;
There are predefined XAML templates available that can be customized. If no customizing is found, the default templates will be used.&lt;br /&gt;
&lt;br /&gt;
== Default XAMLs ==&lt;br /&gt;
All default XAML templates that can be customized are available through the Mobile Windows client. You need to go to the app settings and click the &amp;quot;Unpack default XAMLs&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== Differences to WinX/UWP ==&lt;br /&gt;
* Since it's based on the Mobile XAML dialect, you CANNOT use any existing XAML customizings for the WinX/UWP app;&lt;br /&gt;
* Namespace definitions must include the corresponding assembly names;&lt;br /&gt;
* XAML template files have the extension name of '''xamlx''' instead of '''xaml''';&lt;br /&gt;
* You can deploy only those resources that you want to customize. (This is also the case for newer versions of WinX/UWP. {{Version/WinXSince|3.6}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overriding default XAMLs=&lt;br /&gt;
On Windows (WinX/UWP), the &amp;lt;code&amp;gt;[App Package Folder]/LocalState/xaml/&amp;lt;/code&amp;gt; folder can be accessed by the user and the customized XAML files directly added. An alternative to this on all platforms (including Android, iOS, etc.) is to use the ''Import Customizing'' button in the app settings to import the templates, styles, images, etc. (file by file, or all files within a zip package). The changes should be reflected in the UI (except the current page) without restarting the app. After directly editing the customizings (Mobile Windows), you can also use the &amp;quot;Reload customizing&amp;quot; button without restarting the app.&lt;br /&gt;
&lt;br /&gt;
In the following, we're going to override the default light theme color of the app:&lt;br /&gt;
* Unpack the default XAMLs;&lt;br /&gt;
* Pick and deploy the default UBIKThemes.xamlx to the '''xaml''' folder inside the ''LocalState'' folder;&lt;br /&gt;
* Open it with the text editor of your choice and remove everything within the '''ResouceDictionary''' except &amp;lt;code&amp;gt;&amp;lt;Color x:Key=&amp;quot;UBIKLightThemeColor&amp;quot;&amp;gt;blue&amp;lt;/Color&amp;gt;&amp;lt;/code&amp;gt;;&lt;br /&gt;
* Save the changes and reload. You should see changes successfully implemented.&lt;br /&gt;
&lt;br /&gt;
{{Attention| For maintainability reasons, it's HIGHLY recommended to deploy only those XAML resources you want to override. For example, if you only want to customize the UBIKChildArea, don't deploy others like the UBIKMenuArea. If you only want to customize the UBIKChildItem, that's the only content you should include in the UBIKThemes.}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Templates ==&lt;br /&gt;
Custom templates can be added, just like on the WinX/UWP client. Make sure to include all '''namespace definitions''' (as attributes of the '''ContentView''' tag), otherwise the custom template will not load.&lt;br /&gt;
&lt;br /&gt;
Similar to the ''UBIKThemes.xamlx'' file, custom or overridden templates start with a &amp;lt;code&amp;gt;&amp;lt;ContentView&amp;gt;&amp;lt;/code&amp;gt; tag containing all '''namespaces'''. &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; takes a '''ResourceDictionary''' and contains resources like references to converters. Finally, &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; contains the actual layout content (it's best to start with a '''Grid'''). Again, don't forget to add namespaces that you need!&lt;br /&gt;
&lt;br /&gt;
Templates can also be defined in ''UBIKThemes.xamlx''. In this case, they need to be added into the &amp;lt;code&amp;gt;&amp;lt;ResourceDictionary&amp;gt;&amp;lt;/code&amp;gt; inside the &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; template as a &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt;. Similarly, if you want to split up the templates into seperate files, you need to make sure to follow the steps mentioned above and get the content of the &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt; into the &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
{{Attention|Templates defined in separate files will override templates defined in the ''UBIKThemes.xamlx''!}}&lt;br /&gt;
&lt;br /&gt;
=== Bindings in resources ===&lt;br /&gt;
When using bindings such as [[Xamarin_XAML#Content_filtering|this]] in a resource located in a custom template, it is necessary to place the template in a UBIKContentView.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, this is because bindable objects in the ResourceDictionary of a ContentView (the custom template) don't automatically inherit the BindingContext from the container/parent view. UBIKContentView is created to additionally do that.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- UBIKCustomView.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt... ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Container where UBIKCustomView is placed, e.g. UBIKChildArea.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;controls:UBIKContentView Content=&amp;quot;{Binding [UBIKCustomView], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding Images ==&lt;br /&gt;
Images can't be loaded with the default '''Image''' tag, as the image is on different paths on each operating system.&lt;br /&gt;
&lt;br /&gt;
Therefore, there's a custom '''FileImage''' that internally overrides the default ''Image'' with two custom parameters:&lt;br /&gt;
* '''FolderName''' ...The name of the '''folder''' in the '''local folder'''. Only the first level inside the ''LocalState'' folder seems to work.&lt;br /&gt;
* '''FileName''' ...The name of the '''file''' in the said folder. &lt;br /&gt;
&lt;br /&gt;
Make sure to implement the proper namespace as well by adding&lt;br /&gt;
&amp;lt;code&amp;gt;xmlns:fimage=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; into the root item's attributes.&lt;br /&gt;
&lt;br /&gt;
Then, the image can be loaded using:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fimage:FileImage FileName=&amp;quot;image.png&amp;quot; FolderName=&amp;quot;xaml&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This snipped loads the image called '''image.png''' located in the '''xaml''' folder inside the ''LocalState''.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the ''FileImage'' tag doesn't seem to support most attributes. Therefore place it inside a '''Grid''' to achieve a perfect layout.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Icons ==&lt;br /&gt;
Moved to article [[XAML_Tips#Custom_Icons]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Converters==&lt;br /&gt;
:''Main Page: [[Converters_In_Mobile]]''&lt;br /&gt;
&lt;br /&gt;
They are used to convert specific data into some desired output, using custom logic. &lt;br /&gt;
&lt;br /&gt;
Consider the following example:&amp;lt;br/&amp;gt;&lt;br /&gt;
A label saying ''There are no children items available!'' should only be visible if the number of children-items is 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Advanced =&lt;br /&gt;
&lt;br /&gt;
== Feature related ==&lt;br /&gt;
&lt;br /&gt;
=== Customizing Menu Button {{Version/XamarinSince|4.6.0}} === &lt;br /&gt;
&lt;br /&gt;
For the Mobile Client, it is possible to show/hide the '''Menu button''' of the client.&amp;lt;br&amp;gt;&lt;br /&gt;
To customize the visibility of the '''Menu button''' you have to edit the default XAML '''Themes''' file.&lt;br /&gt;
&lt;br /&gt;
* Search for &amp;quot;'''ShowMenuToolBar'''&amp;quot; in the Themes file.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If there isn't any &amp;quot;'''ShowMenuToolBar'''&amp;quot; in your XAML Themes file, you just have to create one, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Boolean x:Key=&amp;quot;ShowMenuToolBar&amp;quot;&amp;gt;true&amp;lt;/x:Boolean&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the value to &amp;quot;true&amp;quot; to show the '''Menu button''' (default value).&lt;br /&gt;
* Set the value to &amp;quot;false&amp;quot; to hide the '''Menu button'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
File:menu_button_show.png|Menu Button shown&lt;br /&gt;
File:menu_button_hiddenV3.png|Menu Button hidden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Content filtering ===&lt;br /&gt;
For the Mobile clients, an &amp;quot;SfDataSourceExt&amp;quot; type is available for filtering list of items using defined expressions.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following example demonstrates how to filter for child items having certain property values. The filtered list and its count can be displayed in the UI.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&lt;br /&gt;
    ...&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;x:String x:Key=&amp;quot;Expresssion&amp;quot;&amp;gt;Item.Values[&amp;amp;quot;MP_YEAR&amp;amp;quot;].Contains(&amp;amp;quot;2019&amp;amp;quot;)&amp;lt;/x:String&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt  x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource Expresssion}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; Unloaded=&amp;quot;{Binding SkipFiltering}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;StackLayout Orientation=&amp;quot;Vertical&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Label Text=&amp;quot;{Binding DisplayItemsCount, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;controls:SfListViewExt ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/StackLayout&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notes on using bindings in ResourceDictionary ====&lt;br /&gt;
In the example shown above, you can see &amp;lt;code&amp;gt;{Binding Children.Items}&amp;lt;/code&amp;gt; is used. For this to work, the SfDataSourceExt control inside the ResourceDictionary must inherit the binding data context properly.&lt;br /&gt;
* In this case, that data context comes from where this template (UBIKChildArea.xamlx) is used, namely the UBIKContentArea.xamlx;&lt;br /&gt;
* When referencing this template in a ContentView control, the binding data context is '''NOT''' automatically inherited by the controls inside the ResourceDictioinary;&lt;br /&gt;
* That's why we use a UBIKContentView control instead. You can find its example usage in the default UBIKContentArea.xamlx template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Search ===&lt;br /&gt;
In the default UBIKMenuArea.xamlx (where the search UI is hosted), there are two commands associated with two events. See below.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SearchBar ...&amp;gt;&lt;br /&gt;
    &amp;lt;SearchBar.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior&lt;br /&gt;
            Command=&amp;quot;{Binding FreeTextSearchCommand}&amp;quot;&lt;br /&gt;
            CommandParameter=&amp;quot;{Binding Path=Text, Source={x:Reference SearchField}}&amp;quot;&lt;br /&gt;
            EventName=&amp;quot;SearchButtonPressed&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding DelayedFreeTextSearchCommand}&amp;quot; EventName=&amp;quot;TextChanged&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/SearchBar.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/SearchBar&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;SearchButtonPressed&amp;lt;/code&amp;gt; is responsible for executing searches after the user confirms the input (e.g. pressing {{{keypress|Enter}}} or the search button).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;TextChanged&amp;lt;/code&amp;gt; is responsible for the &amp;quot;search as you type&amp;quot; behavior. Namely it triggers an automatic search shortly (half second) after the user stops changing the text in the search bar. It can be turned off by simply removing that particular behavior.&lt;br /&gt;
&lt;br /&gt;
=== DisplayViewCommand ===&lt;br /&gt;
This command can be used to [[Custom_View_(Client)|display custom views]].&lt;br /&gt;
&lt;br /&gt;
=== Flashlight  {{Version/MobileSince|5.1.0}}  ===&lt;br /&gt;
For the Mobile clients, it is possible to control the system flashlight via customizing and switch it on or off.&lt;br /&gt;
&lt;br /&gt;
The available properties can, for example, be bound to a Switch or CheckBox, as demonstrated below. These properties allow you to:&lt;br /&gt;
* Determine whether the device supports flashlight functionality (IsFlashSupported)&lt;br /&gt;
* Check whether the flashlight is currently turned on or off (IsFlashEnabled)&lt;br /&gt;
* Toggle the flashlight on or off via user interaction (SwitchFlashLight) &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If an attempt is made to enable the flashlight on a device that does not provide flashlight support, no action is performed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Switch&lt;br /&gt;
! controls:CheckBox&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Switch IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
        IsToggled=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:CheckBox&lt;br /&gt;
    x:Name=&amp;quot;PropertyToggle&amp;quot;&lt;br /&gt;
    CheckSymbol=&amp;quot;&amp;amp;#x1F526;&amp;quot;&lt;br /&gt;
    IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
    IsChecked=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKIconToggleButton}&amp;quot;&lt;br /&gt;
    SymbolSize=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger&lt;br /&gt;
            Binding=&amp;quot;{Binding AppStatus.IsFlashEnabled}&amp;quot;&lt;br /&gt;
            TargetType=&amp;quot;controls:CheckBox&amp;quot;&lt;br /&gt;
            Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Background&amp;quot; Value=&amp;quot;{StaticResource UBIKAccentColor}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
   &amp;lt;/controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:CheckBox&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
To get a good performance in the app UI when using your Xaml customizings, it is recommended to try the following.&lt;br /&gt;
* Always keep your UI structure simple. Choose the most efficient layouts for the scenarios and avoid unnecessary UI elements. Please refer to [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#choose-the-correct-layout &amp;quot;choose the correct layout&amp;quot;] and [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#reduce-the-visual-tree-size &amp;quot;reduce the visual tree size&amp;quot;];&lt;br /&gt;
* Turn on [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-compression layout compression] on wrapping elements that don't have any visual parameters set (reasons stated in the linked documentation).&lt;br /&gt;
{{Hint|There is a default &amp;quot;HeadlessLayout&amp;quot; style available in the app you can use on elements such as Grids, StackLayouts, ContentViews, etc. It turns on [[Xamarin_XAML#Layout_compression_examples|layout compression]] on the applied elements in Xamarin.Android (since we find it not worth the effort in Xamarin.iOS).}}&lt;br /&gt;
{{Attention|If possible, one should always favor designing the UI with less wrapping elements over turning on layout compression on unnecessary ones.}}&lt;br /&gt;
&lt;br /&gt;
=== General performance tips ===&lt;br /&gt;
* Reduce number of views per page&lt;br /&gt;
* Don’t bind things if they could be set static easily&lt;br /&gt;
* If you do not change the default, don’t set it explicit. For example, [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.StackLayout.Orientation?view=xamarin-forms Orientation of StackLayout] is “Vertical” by default. No need to set it manually if you don’t want to change it.&lt;br /&gt;
* Transparency is expensive.&lt;br /&gt;
* Do not put ListViews into ScrollViews.&lt;br /&gt;
* To stack elements, create a grid and add them to the same cell one after another. It’s cheaper than RelativeLayout.&lt;br /&gt;
* Use Margins instead of Paddings.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
* Choose correct Layout, e.g. no need to add a StackLayout if it only has 1 child.&lt;br /&gt;
* [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-options LayoutOptions].Fill or .FillAndExpand are best choice in most cases. And they are already default, so no need to set.&lt;br /&gt;
* Autosize of rows and columns in grids should used as few as possible.&lt;br /&gt;
* RelativeLayout is very expensive. Try to avoid.&lt;br /&gt;
* In StackLayout, make sure there is only 1 LayoutOptions Expand.&lt;br /&gt;
&lt;br /&gt;
=== Labels ===&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/text/label#formatted-text FormattedText] instead of multiple labels.&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.linebreakmode?view=xamarin-forms Linebreakmode] NoWrap (which is already the default).&lt;br /&gt;
* Avoid [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Label.VerticalTextAlignment?view=xamarin-forms VerticalTextAlignment]. Anyway, if needed, use VerticalTextAligment instead of &lt;br /&gt;
VerticalOptions.&lt;br /&gt;
* Use the &amp;quot;TextTransform&amp;quot; attribute to convert the value of the &amp;quot;Text&amp;quot; attribute to either uppercase or lowercase.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label&lt;br /&gt;
      TextTransform=&amp;quot;Uppercase&amp;quot;&lt;br /&gt;
      Text=&amp;quot;{Binding Properties.AllItems[DESCR].DisplayValue}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Images ===&lt;br /&gt;
* Provide images in optimized width and size. Provide multiple resolutions for different usage.&lt;br /&gt;
* Set [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Image.IsOpaque?view=xamarin-forms IsOpaque] to true if image is opaque.&lt;br /&gt;
&lt;br /&gt;
=== Layout compression examples ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource ChangedSymbol}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The code above removes one wrapping element added automatically by the ContentView and demonstrates a good reason to use layout compression because it can not be avoided otherwise.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid Margin=&amp;quot;2&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Margin=&amp;quot;5&amp;quot; Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This example, on the other hand, demonstrates a bad usage of layout compression because it can be easily achieved by better designs such as using only the Label with a merged margin.&lt;br /&gt;
&lt;br /&gt;
Sometimes the content inside a compressed layout appears on a wrong z-index level. For eample:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;BoxView CornerRadius=&amp;quot;14&amp;quot; HeightRequest=&amp;quot;28&amp;quot; WidthRequest=&amp;quot;28&amp;quot; Color=&amp;quot;Red&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource Badge}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView &amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
According to the order of the BoxView and the Label, the latter should appear on top of the former (later ones have higher z-index levels). However, this can be disturbed by layout compression, causing the exact opposite.&lt;br /&gt;
In this case, you can add a &amp;lt;code&amp;gt;xmlns:android=&amp;quot;clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core&amp;quot;&amp;lt;/code&amp;gt; namespace to your Xaml file and manually elevate the Label by specifying &amp;lt;code&amp;gt;android:VisualElement.Elevation=&amp;quot;X&amp;quot;&amp;lt;/code&amp;gt; on it accordingly (X is the delta of the z-index level you want).&lt;br /&gt;
&lt;br /&gt;
=== SfListViewExt ===&lt;br /&gt;
For performance reasons, we created an extended version of the Syncfusion SfListView control and it should be used for all lists in customizings. You need to add a namespace like &amp;lt;code&amp;gt;xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; to your Xaml file and use it like &amp;lt;code&amp;gt;&amp;lt;controls:SfListViewExt ... /&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{Hint|Technically speaking, SfListViewExt informs item view models when their corresponding item views appear on / disappear from the screen. This way, view models can skip a lot of unnecessary work (on the UI) when their views are not visible. '''If SfListView is used instead, the item views will not reflect content changes until the page is reloaded/refreshed.'''}}&lt;br /&gt;
&lt;br /&gt;
It is possible to configure the ListView, that the ScrollPosition is remembered when navigating away from the page, to do so, the property RembemberScrollPosition needs to be set to true. If unset, the value defaults to false and the scroll positions are not remembered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt RememberScrollPosition=&amp;quot;True&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using multiple Lists on one page (e.g. in a TabbedView), it is necessary to set the AutomationId property uniquely for each list on the page, to support the remembering of the ScrollPosition.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delay and LazyLoading ===&lt;br /&gt;
{{Attention|Although both properties can be set in XAML on the two controls, this should not be done. When both the LazyLoading and Delay properties are set, the Delay property is ignored in the code-behind, as otherwise it could lead to unexpected behavior and, in the worst case, result in performance degradation.}}&lt;br /&gt;
&lt;br /&gt;
==== Delay in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
More complex UIs create a delay in rendering which leads to a feeling of &amp;quot;unresponsiveness&amp;quot; when navigating through the client. This is because the app loads and displays everything at once, leading to a larger delay between triggering navigation and completion of page loading.&lt;br /&gt;
 &lt;br /&gt;
While the complexity of the UI directly affects the time taken to render it, the experience of responsiveness can be somewhat improved by actually adding a delay between the loading of the content page, and actual data content (properties, children, etc). By not loading both at once, resources are freed up in the app, leading to a quicker loading of the basic page. The content then loads in at its normal speed.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Starting from version 5.1, a small delay was introduced in the content heavy pages (child page, document page and query page). However, additional delays can also be applied to the custom UI at will, using a new property added to two existing controls used to insert UI templates: UBIKContentView and ContentControl. You can specify a delay (in milliseconds) on both controls so that the content of them is loaded after that amount of time. Examples are shown below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:ContentControl &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    ContentTemplate=&amp;quot;{Binding [UBIKNavigationBar], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hint|The delay won't have any effect if you specify the Content of the UBIKContentView control instead of its Converter, because the Content is immediately laid out by the XAML framework that way. If you don't need a converter to determine the actual template name dynamically, you can still use the TemplateConverter and specify the template name like the following so that the delay applies.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay applies ✅&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; ConverterParameter=&amp;quot;UBIKChildArea&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay doesn't apply ❌&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Content=&amp;quot;{Binding [UBIKChildArea], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Lazy Loading in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
To further improve performance, it is now possible to apply LazyLoading to UBIKContentView and ContentControl. &lt;br /&gt;
&lt;br /&gt;
When a ContentTemplate is assigned to either of these controls and the LazyLoading property is set to true, the content is only loaded when it is explicitly requested. The difference between this and simply controlling the IsVisible condition is that in the latter, resources are still consumed in constructing the UI element, even though it is not shown. Note that Lazy loading requires a trigger to determine when the content should be loaded, and the biggest benefit is experienced when complex elements, especially those hosting a ListView or some kind of object/property collection, are lazy-loaded. &lt;br /&gt;
&lt;br /&gt;
UBIKTabView is optimized to make use of the LazyLoading attribute when it is applied to tab content. Additionally, usage outside of UBIKTabView is possible, as the loading can be triggered as a behavior attached to any other control, such as a button with an IsClicked behavior handler. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UBIKTabView with LazyLoading'''&lt;br /&gt;
&lt;br /&gt;
When used in combination with UBIKTabView (by including the LazyLoading=True attribute on any UBIKContentView or ContentControl content of a tab item, as is now standard {{Version/MobileSince|5.1}}), only the content of the selected tab is rendered (by default, the first tab). The content of non-selected tabs is not. When switching tabs, UBIKTabView takes care of triggering the rendering of the content for the newly selected tab. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView &lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; &lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKPropertyArea&amp;quot; &lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:ContentControl &lt;br /&gt;
            ContentTemplate=&amp;quot;{DynamicResource MyTemplate}&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Using another control as a trigger for lazy loading'''&lt;br /&gt;
&lt;br /&gt;
Other controls (e.g., Button, CheckBox, etc.) can also serve as triggers for lazy loading. The benefit of this is that LazyLoading can still be applied to a complex UBIKContentView or ContentControl that is not hosted within a UBIKTabView. &lt;br /&gt;
&lt;br /&gt;
And example of a usecase is a togglebutton that reveals a section of content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
    &amp;lt;Grid RowDefinitions=&amp;quot;*,50,*&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView x:Name=&amp;quot;ChildContainer&amp;quot; Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;Button&lt;br /&gt;
            x:Name=&amp;quot;LoadDocuments&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;1&amp;quot;&lt;br /&gt;
            HeightRequest=&amp;quot;50&amp;quot;&lt;br /&gt;
            HorizontalOptions=&amp;quot;Center&amp;quot;&lt;br /&gt;
            Text=&amp;quot;LazyLoadDocuments&amp;quot;&lt;br /&gt;
            WidthRequest=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;Clicked&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;behaviors:InvokeMethodAction MethodName=&amp;quot;TriggerLazyLoad&amp;quot; TargetObject=&amp;quot;{Binding Source={x:Reference DocumentsAreaLoader}}&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;/Button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;controls:UBIKContentView&lt;br /&gt;
            x:Name=&amp;quot;DocumentsAreaLoader&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;2&amp;quot;&lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot;&lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKDocumentArea&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Known issues =&lt;br /&gt;
&lt;br /&gt;
=== Headlesslayout style in custom UBIKThemes causing problems ===&lt;br /&gt;
&lt;br /&gt;
In our default '''UBIKThemes''', we are currently using this style for a headless layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;HeadlessLayout&amp;quot; TargetType=&amp;quot;Layout&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;CompressedLayout.IsHeadless&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Setter.Value&amp;gt;&lt;br /&gt;
            &amp;lt;OnPlatform&lt;br /&gt;
                x:TypeArguments=&amp;quot;x:Boolean&amp;quot;&lt;br /&gt;
                Android=&amp;quot;True&amp;quot;&lt;br /&gt;
                WinPhone=&amp;quot;False&amp;quot;&lt;br /&gt;
                iOS=&amp;quot;False&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Setter.Value&amp;gt;&lt;br /&gt;
    &amp;lt;/Setter&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
This style is used for better UI performance on Android.&lt;br /&gt;
Using this style in a '''custom UBIKThemes''' could cause an exception &amp;amp; an app crash, or some objects to disappear.&lt;br /&gt;
The best case would be to '''not''' include it in the custom themes file, as it's unnecessary if you don't want to make any changes here.&lt;br /&gt;
&lt;br /&gt;
'''This issue is only known on Android tablet devices.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataTrigger Issues ===&lt;br /&gt;
==== Conflicting Triggers ====&lt;br /&gt;
DataTriggers in Mobile function better than the equivalent DataTriggerBehavior in UWP as they automatically handle the opposite case when a Boolean attribute value is set. This means that if a boolean DataTrigger is set, such as IsVisible=True, the False visibility will automatically be set if the Binding/Value condition is not met.&lt;br /&gt;
&lt;br /&gt;
However, this means that stacking multiple DataTriggers on the same attribute can lead to unexpected results. For this reason, it is recommended to use as few DataTriggers as possible. &lt;br /&gt;
* Avoid setting the same attribute more than once; do not set the same value as a default attribute and in the DataTrigger (ControlTemplate in the below example).&lt;br /&gt;
* Ideally, use only DataTriggers without a default ControlTemplate. This ensures that content is created only after the trigger evaluation is complete. If a default ControlTemplate is set, it is always loaded immediately, even if another template is applied right after.&lt;br /&gt;
* It is acceptable, but not recommended, to combine a single DataTrigger with an opposite default value, but only if the default value is different from all values set in triggers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Don't Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Instead Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Acceptable, but not recommended&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== DataTrigger to set Footer Properties in a ListView ====&lt;br /&gt;
&lt;br /&gt;
When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases.&lt;br /&gt;
It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty.&lt;br /&gt;
&lt;br /&gt;
If you encounter such an issue, please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger.&lt;br /&gt;
Also, new customizings should consider this workaround as a preventive action.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK IN CERTAIN CASES --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Incorrect glyphs may be shown on buttons ===&lt;br /&gt;
&lt;br /&gt;
When using glyphs on buttons in Mobile, sometimes a different glyph than the expected one will show up when viewing the app on Android.&lt;br /&gt;
They only seem to appear incorrectly when used as the Text property of the button (with FontFamily set to UBIKSymbols, such as the UBIKIconButton style.)&lt;br /&gt;
&lt;br /&gt;
If you encounter this issue please workaround by supplying the icon through the FontImageSource property of the button.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding BulkOperation.InvokeOnItemsCommand}&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;Button.ImageSource&amp;gt;&lt;br /&gt;
          &amp;lt;FontImageSource &lt;br /&gt;
               FontFamily=&amp;quot;{DynamicResource UBIKSymbols}&amp;quot;&lt;br /&gt;
               Glyph=&amp;quot;{x:Static resources:UBIKIcons.MobileDelete}&amp;quot;&lt;br /&gt;
               Color=&amp;quot;{DynamicResource UBIKDarkThemeColor}&amp;quot;&lt;br /&gt;
               Size=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.ImageSource&amp;gt;&lt;br /&gt;
     &amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
          &amp;lt;classes:KeyValueList&amp;gt;&lt;br /&gt;
                    &amp;lt;classes:KeyValueParameter Key=&amp;quot;Command&amp;quot; Value=&amp;quot;DiscardContentCommand&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/classes:KeyValueList&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Buttons and gesture recognizers ===&lt;br /&gt;
In Mobile XAML, you can use gesture recognizers on many UI elements such as a Grid to enable the latter to interact with user inputs.&lt;br /&gt;
&lt;br /&gt;
However, we've already made quite a lot of experience that gesture recognizers do not always work on Android and iOS when used on a Button control.&lt;br /&gt;
For example, the following Button won't properly invoke the command on said platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK!!! --&amp;gt;&lt;br /&gt;
&amp;lt;Button ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.GestureRecognizers&amp;gt;&lt;br /&gt;
        &amp;lt;TapGestureRecognizer Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.GestureRecognizers&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Therefore, you should always seek alternatives for Buttons.&lt;br /&gt;
'''If only one command is needed''', use the standard Command property on the Button, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; .../&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Or if multiple commands are needed, use Behaviors '''instead''', e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS ALSO WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button xmlns:behaviors=&amp;quot;clr-namespace:UBIK.CPL.Behaviors;assembly=UBIK.CPL&amp;quot; ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding NavigateBackCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== No dynamic reloading of Document Viewer ===&lt;br /&gt;
[[File:PDFViewerFixWiki.JPG]]&lt;br /&gt;
&lt;br /&gt;
In a customizing that combines a single-selection list of documents with some kind of viewer (especially UBIKDocumentContentArea), it is generally the case that switching the document causes the document viewer to then appear blank. The technical reason is that the PDFViewer used in the UBIKDocumentContentArea is not reloaded once the document content is reloaded. &lt;br /&gt;
&lt;br /&gt;
An easy fix is to apply a DataTrigger that unloads the ContentView when the document content is null, as the ContentView is forced to rerender itself when the trigger condition is no longer met.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Document Viewer --&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    x:Name=&amp;quot;DoucmentViewer&amp;quot; &lt;br /&gt;
    BindingContext=&amp;quot;{Binding SelectedItem, Source={x:Reference DocumentList}}&amp;quot;&lt;br /&gt;
    Content=&amp;quot;{Binding [UBIKDocumentContentArea], Source={x:Static services:TemplateService.Instance}}&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger TargetType=&amp;quot;controls:UBIKContentView&amp;quot; Binding=&amp;quot;{Binding SelectedItem.DocumentViewModel.DocumentContent, Source={x:Reference DocumentList}, Converter={StaticResource NullToBool}}&amp;quot; Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Content&amp;quot; Value=&amp;quot;{x:Null}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Issues with SfPullToRefresh in Mobile client {{Version/MobileSince|5.0}} ===&lt;br /&gt;
Due to a third-party issue, problems may occur on Mobile Android when using the SfPullToRefresh control in combination with the SfListViewExt. This can result in e.g. navigation or task interaction sometimes requiring multiple clicks.&lt;br /&gt;
In general, and due to more issues, it's not recommended to use the SfPullToRefresh control.&lt;br /&gt;
In our Mobile standard client, the PullToRefresh control has been replaced by a Refresh button in the Context Menu.&lt;br /&gt;
If you still decide to use SfPullToRefresh, there are a few points to consider:&lt;br /&gt;
&lt;br /&gt;
==== Avoid multiple SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue that causes the app to freeze, avoid placing more than one SfPullToRefresh controls as siblings in a xaml hierarchy. If switching between contents in a SfPullToRefresh control is necessary use separate DataTemplates for the contents and use e.g. a DataTrigger to set one of them as the ControlTemplate of a ContentControl inside the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_multiple_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
==== Avoid using SyncFusion ListViews directly in SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue on some Android devices that can cause some items in a SfListViewExt to be rendered incorrectly or not at all after triggering a PullToRefresh, avoid placing a SfListViewExt directly in a SfPullToRefresh control. Instead, wrap the ListView in a DataTemplate and use it in a ContentControl as a child of the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_using_SyncFusion_ListViews_directly_in_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
=== Tooltips not supported on mobile iOS devices {{Version/MobileSince|5.0}} ===&lt;br /&gt;
On iOS, native tooltips are only supported under very specific conditions. According to the official [https://learn.microsoft.com/en-us/dotnet/maui/user-interface/tooltips?view=net-maui-10.0| Microsoft documentation], tooltips are only shown when running the app on macOS with a pointer device. On physical iPhones and iPads, tooltips are generally not displayed. This means that using ToolTipProperties in XAML will not work reliably on iOS mobile devices.&lt;br /&gt;
&lt;br /&gt;
A possible workaround is to simulate tooltip behavior using a [https://help.syncfusion.com/maui/popup/overview| SfPopup control]. The idea is to use a tap interaction on the UI element (e.g., via a ''TappedBehavior'' with a ''SetPropertyAction'') that opens a Popup positioned relative to that element, and to automatically close the Popup after a short duration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- AFTER WORKAROUND --&amp;gt;&lt;br /&gt;
xmlns:sfPopup=&amp;quot;clr-namespace:Syncfusion.Maui.Popup;assembly=Syncfusion.Maui.Popup&amp;quot;&lt;br /&gt;
xmlns:behaviors=&amp;quot;clr-namespace:UBIK.MAUI.Behaviors;assembly=UBIK.MAUI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sfPopup:SfPopup&lt;br /&gt;
    x:Name=&amp;quot;TooltipTextPopup&amp;quot;&lt;br /&gt;
    AutoCloseDuration=&amp;quot;3000&amp;quot;&lt;br /&gt;
    RelativePosition=&amp;quot;AlignTop&amp;quot;&lt;br /&gt;
    RelativeView=&amp;quot;{x:Reference YourUIElement}&amp;quot;&lt;br /&gt;
    ShowHeader=&amp;quot;False&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;sfPopup:SfPopup.ContentTemplate&amp;gt;&lt;br /&gt;
        &amp;lt;DataTemplate&amp;gt;&lt;br /&gt;
                &amp;lt;Label Text=&amp;quot;This will be displayed as Tooltip text&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;
    &amp;lt;/sfPopup:SfPopup.ContentTemplate&amp;gt;&lt;br /&gt;
&amp;lt;/sfPopup:SfPopup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Border x:Name=&amp;quot;YourUIElement&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Border.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:TappedBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;behaviors:SetPropertyAction&lt;br /&gt;
                PropertyName=&amp;quot;IsOpen&amp;quot;&lt;br /&gt;
                TargetObject=&amp;quot;{Binding Source={x:Reference TooltipTextPopup}}&amp;quot;&lt;br /&gt;
                Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviors:TappedBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Border.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BEFORE WORKAROUND --&amp;gt;&lt;br /&gt;
&amp;lt;Border x:Name=&amp;quot;YourUIElement&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ToolTipProperties.Text&amp;gt;&lt;br /&gt;
         This will NOT be shown on iOS&lt;br /&gt;
    &amp;lt;/ToolTipProperties.Text&amp;gt;&lt;br /&gt;
&amp;lt;/Border&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
= UBIK Go (Maui) Customizing Guide {{Version/MobileSince|5.1}} =&lt;br /&gt;
The change to Maui was taken as an opportunity both to visually update the client's default UI, and to add some quality of life changes aiming to reduce the amount of customizing needed.&lt;br /&gt;
&lt;br /&gt;
This section describes the standard UI and how to more easily customize it.&lt;br /&gt;
&lt;br /&gt;
For differences between Xamarin and Maui, please refer to the [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] article.&lt;br /&gt;
&lt;br /&gt;
== XAML Changes And Improvements ==&lt;br /&gt;
=== Styles and Resources ===&lt;br /&gt;
* Various color elements were renamed for neutrality. This will help clarify the purpose of color themes, and make it easier to keep track of in customizings. The old versions are still available but moved to the Obsolete section of UBIKThemes. &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKDarkTextColor --&amp;gt; UBIKRegularTextColor&lt;br /&gt;
UBIKDarkThemeColor --&amp;gt; UBIKMainThemeColor&lt;br /&gt;
UBIKLightTextColor --&amp;gt; UBIKMainThemeContrastColor&lt;br /&gt;
UBIKLightThemeColor --&amp;gt; UBIKBasePageColor&lt;br /&gt;
UBIKSubtleTextColor --&amp;gt; UBIKMediumTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Furthermore, effort was made to create 'contrast pairs' throughout the client; for example, UBIKMainThemeContrastColor is defined primarily for texts layered on elements of UBIKMainThemeColor (such as the title bar and text). &lt;br /&gt;
** The intention here is that this pair can be safely customized with no surprises, that cannot be guaranteed when using non-paired resource. For example, UBIKMainThemeContrastColor  and UBIKBasePageColor are both white in the default customizing, but if UBIKBasePageColor that were to be layered over UBIKMainThemeColor, it would result in a black-on-black issue in a dark theme customizing. &lt;br /&gt;
** The 'pairs' are; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKMainThemeColor x UBIKMainThemeContrastColor&lt;br /&gt;
UBIKBasePageColor x UBIKRegularTextColor&lt;br /&gt;
UBIKButtonColor x UBIKButtonTextColor &lt;br /&gt;
UBIKButtonToggledColor x UBIKButtonToggledTextColor &lt;br /&gt;
UBIKPDFBaseColor x UBIKPDFTextColor&lt;br /&gt;
UBIKPDFSelectedToolColor x UBIKPDFSelectedToolTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* An effort was also made to avoid hardcoding numeric values on the client. Reusable resources were introduced instead; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonIconSize&amp;quot;&amp;gt;20&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonPanelSize&amp;quot;&amp;gt;56&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonSize&amp;quot;&amp;gt;44&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKListItemSize&amp;quot;&amp;gt;80&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKTileItemSize&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;120&amp;quot; Phone=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKCaptionTextSize&amp;quot;&amp;gt;14&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKBodyTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKTitleTextSize&amp;quot;&amp;gt;18&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKProgressBarHeight&amp;quot;&amp;gt;4&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptivePadding&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;8,0&amp;quot; Phone=&amp;quot;4,0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptiveSpacing&amp;quot; x:TypeArguments=&amp;quot;x:Double&amp;quot; Default=&amp;quot;16&amp;quot; Phone=&amp;quot;8&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regarding corporate colors, there are now additional resources to customize, aside from UBIKAccentColor;&lt;br /&gt;
** UBIKHighlightColor is a secondary accent color used for highlighting (eg. Multiselect mode or edited Property). {{Version/MobileSince|5.1.0.0}} Transparency has been added to the UBIKHighlightColor.&lt;br /&gt;
** UBIKGradientColor {{Version/MobileSince|5.1.0.0}} is used in combination with UBIKAccentColor to form a gradient on the Authentication area.&lt;br /&gt;
* As in WinX {{Version/WinXSince|4.0}}, the various possible object status indicators were exported to a template called '''StatusIndicators''' located in UBIKThemes. These are now displayed at the top right of the item template, with a semi-opaque underlay in case the indicators appear over Title/SubTitle text.&lt;br /&gt;
* '''SfTextInputLayout''' was introduced and is used in various locations (Authentication, and properties).&lt;br /&gt;
* Default values for size, font, color, etc, were applied to various controls (Picker, Entry etc) for consistency.&lt;br /&gt;
* New '''SfListView''' styles were introduced and the originals moved to the Obsolete section.&lt;br /&gt;
** The listview now has a background color (UBIKMediumElementColor) and child item templates are now responsible for providing their own background color (UBIKBasePageColor that is applied to the Grid style UBIKItemBase). &lt;br /&gt;
*** The intention is to provide visual distinction from actual list items and empty list 'space'.&lt;br /&gt;
*** However, this will interfere with lists that rely on the SelectionBackground to highlight selection. This is solved in various ways throughout the UI, such as the SelectedIndicator used in UBIKChildItem, or the seperate SelectedItem and SelectedItemTemplate templates used in UBIKEditGuid.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Adaptivity ===&lt;br /&gt;
- tbd.&lt;br /&gt;
&lt;br /&gt;
=== Layout and Functionality ===&lt;br /&gt;
* '''UBIKNavigationBar''' was introduced as a templatable alternative to the hardcoded context menu (accessed by the '...' button in the top right of the content area) and is fully customizable.&lt;br /&gt;
* Shadowed panels were introduced in place of floating buttons in the content tabs (Children, Properties). For consistency, both are located at the top of their respective tab content.&lt;br /&gt;
* '''UBIKChildItem''' was visually simplified. It now displays a simple icon, the Title (and MRO progress, if any) and Subtitle, and StatusIndicators in the top right. The progressbar is now displayed across the bottom of the item.&lt;br /&gt;
* '''UBIKTaskItem''' was completely redesigned. &lt;br /&gt;
** Aside from the StatusIndicators that appear in the top right uniformly on any context object, MRO-related ones (Task status (Finished, NA, or Not Necessary, Group Limit and Size, Previous Value, and Tech Indicator) appear on the top left contained in an SfChipGroup. &lt;br /&gt;
** The main area of the task item is previously split between Title and task-related input. On smaller devices or in editing regardless of screen size, the input area sizes becomes larger.&lt;br /&gt;
** The task related input now looks visually distinct with and without a value. UBIKButton(Text)Color is used for 'new' tasks, while UBIKButtonToggled(Text)Color is used for the 'value filled' state.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
* '''UBIKRootItem''' (formerly UBIKMainItem) was introduced simply so that the Title, Area, and Item are organized together within the default and customizing folders. For compatibility, UBIKMainItem still exists in the default folder, however, be aware that the listview in UBIKRootArea now requests UBIKRootItem as the ItemTemplate by default.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Customizing Guides ==&lt;br /&gt;
=== Dark Theme ===&lt;br /&gt;
While UBIK Go does not include a Dark Theme by default, a lot of effort was invested in optimizing the color resources used throughout the app, so that a dark theme can be quickly customized. Furthermore, below is a list of recommended changes that result in a functional dark theme.&lt;br /&gt;
&lt;br /&gt;
'''In UBIKThemes:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;x:String x:Key=&amp;quot;TextFontFamily&amp;quot;&amp;gt;InterL&amp;lt;/x:String&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the value for TextFontFamily with &amp;quot;InterL&amp;quot;; It is recommended to use a thinner font as white on black looks bolder than the inverse.&lt;br /&gt;
A 'Light' version of the default font font was added and can be accessed using the tag InterL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKRegularTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMediumTextColor&amp;quot;&amp;gt;#A3ffffff&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBasePageColor&amp;quot;&amp;gt;#3a3a3c&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMainThemeColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBorderColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKElementColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKLightElementColor&amp;quot;&amp;gt;#222124&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKFinishedElementColor&amp;quot;&amp;gt;#2a2a2b&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKOverlayElementColor&amp;quot;&amp;gt;#3D000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKImageOverlayColor&amp;quot;&amp;gt;#A3000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt; &lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledTextColor&amp;quot;&amp;gt;Black&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolTextColor&amp;quot;&amp;gt;#292929&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFBaseColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the above color resources (or similar).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Shadow&lt;br /&gt;
        x:Key=&amp;quot;UBIKPanelShadow&amp;quot;&lt;br /&gt;
        Brush=&amp;quot;Black&amp;quot; ... /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change the value for the attribute Brush to &amp;quot;Black&amp;quot; to darken the panel shadows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;&amp;gt;#636365&amp;lt;/Color&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;UBIKProgressBar&amp;quot; TargetType=&amp;quot;controls:ProgressBar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;StatusColor&amp;quot; Value=&amp;quot;{Binding ClassificationHandler.StatusColor, Converter={StaticResource IntToColor}, ConverterParameter={StaticResource UBIKProgressBarUndefinedStatuscolor}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The light theme uses UBIKElementColor for the progress bar color when none is defined on the server. However, this does not invert well in a dark theme. Therefore a new color resource should be introduced (&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;) and used in the ConverterParameter of the IntToColor converter, which does not accept a color hex code directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''In UBIKSplashArea:'''&lt;br /&gt;
&lt;br /&gt;
Follow the instructions embedded within the file to replace the splash image with a custom logo. Alternatively, simply adapt the Source attribute of the Image control to &amp;quot;splashlogoinverse.png&amp;quot; to apply an inversion of the UBIK Go logo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Increased FontSize ===&lt;br /&gt;
tbd.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29805</id>
		<title>Mobile XAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29805"/>
				<updated>2026-05-06T13:38:41Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Tooltips not supported on some iOS devices {{Version/MobileSince|5.0}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The User Interface of the Mobile Clients (Android, iOS, Windows) can be fundamentally customized using custom XAML definitions. This customization process is heavily influenced by the [[XAML|XAML Customization Process on the WinX Client]].&lt;br /&gt;
&lt;br /&gt;
= Basics =&lt;br /&gt;
There are predefined XAML templates available that can be customized. If no customizing is found, the default templates will be used.&lt;br /&gt;
&lt;br /&gt;
== Default XAMLs ==&lt;br /&gt;
All default XAML templates that can be customized are available through the Mobile Windows client. You need to go to the app settings and click the &amp;quot;Unpack default XAMLs&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== Differences to WinX/UWP ==&lt;br /&gt;
* Since it's based on the Mobile XAML dialect, you CANNOT use any existing XAML customizings for the WinX/UWP app;&lt;br /&gt;
* Namespace definitions must include the corresponding assembly names;&lt;br /&gt;
* XAML template files have the extension name of '''xamlx''' instead of '''xaml''';&lt;br /&gt;
* You can deploy only those resources that you want to customize. (This is also the case for newer versions of WinX/UWP. {{Version/WinXSince|3.6}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overriding default XAMLs=&lt;br /&gt;
On Windows (WinX/UWP), the &amp;lt;code&amp;gt;[App Package Folder]/LocalState/xaml/&amp;lt;/code&amp;gt; folder can be accessed by the user and the customized XAML files directly added. An alternative to this on all platforms (including Android, iOS, etc.) is to use the ''Import Customizing'' button in the app settings to import the templates, styles, images, etc. (file by file, or all files within a zip package). The changes should be reflected in the UI (except the current page) without restarting the app. After directly editing the customizings (Mobile Windows), you can also use the &amp;quot;Reload customizing&amp;quot; button without restarting the app.&lt;br /&gt;
&lt;br /&gt;
In the following, we're going to override the default light theme color of the app:&lt;br /&gt;
* Unpack the default XAMLs;&lt;br /&gt;
* Pick and deploy the default UBIKThemes.xamlx to the '''xaml''' folder inside the ''LocalState'' folder;&lt;br /&gt;
* Open it with the text editor of your choice and remove everything within the '''ResouceDictionary''' except &amp;lt;code&amp;gt;&amp;lt;Color x:Key=&amp;quot;UBIKLightThemeColor&amp;quot;&amp;gt;blue&amp;lt;/Color&amp;gt;&amp;lt;/code&amp;gt;;&lt;br /&gt;
* Save the changes and reload. You should see changes successfully implemented.&lt;br /&gt;
&lt;br /&gt;
{{Attention| For maintainability reasons, it's HIGHLY recommended to deploy only those XAML resources you want to override. For example, if you only want to customize the UBIKChildArea, don't deploy others like the UBIKMenuArea. If you only want to customize the UBIKChildItem, that's the only content you should include in the UBIKThemes.}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Templates ==&lt;br /&gt;
Custom templates can be added, just like on the WinX/UWP client. Make sure to include all '''namespace definitions''' (as attributes of the '''ContentView''' tag), otherwise the custom template will not load.&lt;br /&gt;
&lt;br /&gt;
Similar to the ''UBIKThemes.xamlx'' file, custom or overridden templates start with a &amp;lt;code&amp;gt;&amp;lt;ContentView&amp;gt;&amp;lt;/code&amp;gt; tag containing all '''namespaces'''. &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; takes a '''ResourceDictionary''' and contains resources like references to converters. Finally, &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; contains the actual layout content (it's best to start with a '''Grid'''). Again, don't forget to add namespaces that you need!&lt;br /&gt;
&lt;br /&gt;
Templates can also be defined in ''UBIKThemes.xamlx''. In this case, they need to be added into the &amp;lt;code&amp;gt;&amp;lt;ResourceDictionary&amp;gt;&amp;lt;/code&amp;gt; inside the &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; template as a &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt;. Similarly, if you want to split up the templates into seperate files, you need to make sure to follow the steps mentioned above and get the content of the &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt; into the &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
{{Attention|Templates defined in separate files will override templates defined in the ''UBIKThemes.xamlx''!}}&lt;br /&gt;
&lt;br /&gt;
=== Bindings in resources ===&lt;br /&gt;
When using bindings such as [[Xamarin_XAML#Content_filtering|this]] in a resource located in a custom template, it is necessary to place the template in a UBIKContentView.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, this is because bindable objects in the ResourceDictionary of a ContentView (the custom template) don't automatically inherit the BindingContext from the container/parent view. UBIKContentView is created to additionally do that.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- UBIKCustomView.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt... ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Container where UBIKCustomView is placed, e.g. UBIKChildArea.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;controls:UBIKContentView Content=&amp;quot;{Binding [UBIKCustomView], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding Images ==&lt;br /&gt;
Images can't be loaded with the default '''Image''' tag, as the image is on different paths on each operating system.&lt;br /&gt;
&lt;br /&gt;
Therefore, there's a custom '''FileImage''' that internally overrides the default ''Image'' with two custom parameters:&lt;br /&gt;
* '''FolderName''' ...The name of the '''folder''' in the '''local folder'''. Only the first level inside the ''LocalState'' folder seems to work.&lt;br /&gt;
* '''FileName''' ...The name of the '''file''' in the said folder. &lt;br /&gt;
&lt;br /&gt;
Make sure to implement the proper namespace as well by adding&lt;br /&gt;
&amp;lt;code&amp;gt;xmlns:fimage=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; into the root item's attributes.&lt;br /&gt;
&lt;br /&gt;
Then, the image can be loaded using:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fimage:FileImage FileName=&amp;quot;image.png&amp;quot; FolderName=&amp;quot;xaml&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This snipped loads the image called '''image.png''' located in the '''xaml''' folder inside the ''LocalState''.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the ''FileImage'' tag doesn't seem to support most attributes. Therefore place it inside a '''Grid''' to achieve a perfect layout.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Icons ==&lt;br /&gt;
Moved to article [[XAML_Tips#Custom_Icons]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Converters==&lt;br /&gt;
:''Main Page: [[Converters_In_Mobile]]''&lt;br /&gt;
&lt;br /&gt;
They are used to convert specific data into some desired output, using custom logic. &lt;br /&gt;
&lt;br /&gt;
Consider the following example:&amp;lt;br/&amp;gt;&lt;br /&gt;
A label saying ''There are no children items available!'' should only be visible if the number of children-items is 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Advanced =&lt;br /&gt;
&lt;br /&gt;
== Feature related ==&lt;br /&gt;
&lt;br /&gt;
=== Customizing Menu Button {{Version/XamarinSince|4.6.0}} === &lt;br /&gt;
&lt;br /&gt;
For the Mobile Client, it is possible to show/hide the '''Menu button''' of the client.&amp;lt;br&amp;gt;&lt;br /&gt;
To customize the visibility of the '''Menu button''' you have to edit the default XAML '''Themes''' file.&lt;br /&gt;
&lt;br /&gt;
* Search for &amp;quot;'''ShowMenuToolBar'''&amp;quot; in the Themes file.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If there isn't any &amp;quot;'''ShowMenuToolBar'''&amp;quot; in your XAML Themes file, you just have to create one, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Boolean x:Key=&amp;quot;ShowMenuToolBar&amp;quot;&amp;gt;true&amp;lt;/x:Boolean&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the value to &amp;quot;true&amp;quot; to show the '''Menu button''' (default value).&lt;br /&gt;
* Set the value to &amp;quot;false&amp;quot; to hide the '''Menu button'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
File:menu_button_show.png|Menu Button shown&lt;br /&gt;
File:menu_button_hiddenV3.png|Menu Button hidden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Content filtering ===&lt;br /&gt;
For the Mobile clients, an &amp;quot;SfDataSourceExt&amp;quot; type is available for filtering list of items using defined expressions.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following example demonstrates how to filter for child items having certain property values. The filtered list and its count can be displayed in the UI.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&lt;br /&gt;
    ...&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;x:String x:Key=&amp;quot;Expresssion&amp;quot;&amp;gt;Item.Values[&amp;amp;quot;MP_YEAR&amp;amp;quot;].Contains(&amp;amp;quot;2019&amp;amp;quot;)&amp;lt;/x:String&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt  x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource Expresssion}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; Unloaded=&amp;quot;{Binding SkipFiltering}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;StackLayout Orientation=&amp;quot;Vertical&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Label Text=&amp;quot;{Binding DisplayItemsCount, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;controls:SfListViewExt ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/StackLayout&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notes on using bindings in ResourceDictionary ====&lt;br /&gt;
In the example shown above, you can see &amp;lt;code&amp;gt;{Binding Children.Items}&amp;lt;/code&amp;gt; is used. For this to work, the SfDataSourceExt control inside the ResourceDictionary must inherit the binding data context properly.&lt;br /&gt;
* In this case, that data context comes from where this template (UBIKChildArea.xamlx) is used, namely the UBIKContentArea.xamlx;&lt;br /&gt;
* When referencing this template in a ContentView control, the binding data context is '''NOT''' automatically inherited by the controls inside the ResourceDictioinary;&lt;br /&gt;
* That's why we use a UBIKContentView control instead. You can find its example usage in the default UBIKContentArea.xamlx template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Search ===&lt;br /&gt;
In the default UBIKMenuArea.xamlx (where the search UI is hosted), there are two commands associated with two events. See below.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SearchBar ...&amp;gt;&lt;br /&gt;
    &amp;lt;SearchBar.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior&lt;br /&gt;
            Command=&amp;quot;{Binding FreeTextSearchCommand}&amp;quot;&lt;br /&gt;
            CommandParameter=&amp;quot;{Binding Path=Text, Source={x:Reference SearchField}}&amp;quot;&lt;br /&gt;
            EventName=&amp;quot;SearchButtonPressed&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding DelayedFreeTextSearchCommand}&amp;quot; EventName=&amp;quot;TextChanged&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/SearchBar.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/SearchBar&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;SearchButtonPressed&amp;lt;/code&amp;gt; is responsible for executing searches after the user confirms the input (e.g. pressing {{{keypress|Enter}}} or the search button).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;TextChanged&amp;lt;/code&amp;gt; is responsible for the &amp;quot;search as you type&amp;quot; behavior. Namely it triggers an automatic search shortly (half second) after the user stops changing the text in the search bar. It can be turned off by simply removing that particular behavior.&lt;br /&gt;
&lt;br /&gt;
=== DisplayViewCommand ===&lt;br /&gt;
This command can be used to [[Custom_View_(Client)|display custom views]].&lt;br /&gt;
&lt;br /&gt;
=== Flashlight  {{Version/MobileSince|5.1.0}}  ===&lt;br /&gt;
For the Mobile clients, it is possible to control the system flashlight via customizing and switch it on or off.&lt;br /&gt;
&lt;br /&gt;
The available properties can, for example, be bound to a Switch or CheckBox, as demonstrated below. These properties allow you to:&lt;br /&gt;
* Determine whether the device supports flashlight functionality (IsFlashSupported)&lt;br /&gt;
* Check whether the flashlight is currently turned on or off (IsFlashEnabled)&lt;br /&gt;
* Toggle the flashlight on or off via user interaction (SwitchFlashLight) &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If an attempt is made to enable the flashlight on a device that does not provide flashlight support, no action is performed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Switch&lt;br /&gt;
! controls:CheckBox&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Switch IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
        IsToggled=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:CheckBox&lt;br /&gt;
    x:Name=&amp;quot;PropertyToggle&amp;quot;&lt;br /&gt;
    CheckSymbol=&amp;quot;&amp;amp;#x1F526;&amp;quot;&lt;br /&gt;
    IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
    IsChecked=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKIconToggleButton}&amp;quot;&lt;br /&gt;
    SymbolSize=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger&lt;br /&gt;
            Binding=&amp;quot;{Binding AppStatus.IsFlashEnabled}&amp;quot;&lt;br /&gt;
            TargetType=&amp;quot;controls:CheckBox&amp;quot;&lt;br /&gt;
            Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Background&amp;quot; Value=&amp;quot;{StaticResource UBIKAccentColor}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
   &amp;lt;/controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:CheckBox&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
To get a good performance in the app UI when using your Xaml customizings, it is recommended to try the following.&lt;br /&gt;
* Always keep your UI structure simple. Choose the most efficient layouts for the scenarios and avoid unnecessary UI elements. Please refer to [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#choose-the-correct-layout &amp;quot;choose the correct layout&amp;quot;] and [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#reduce-the-visual-tree-size &amp;quot;reduce the visual tree size&amp;quot;];&lt;br /&gt;
* Turn on [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-compression layout compression] on wrapping elements that don't have any visual parameters set (reasons stated in the linked documentation).&lt;br /&gt;
{{Hint|There is a default &amp;quot;HeadlessLayout&amp;quot; style available in the app you can use on elements such as Grids, StackLayouts, ContentViews, etc. It turns on [[Xamarin_XAML#Layout_compression_examples|layout compression]] on the applied elements in Xamarin.Android (since we find it not worth the effort in Xamarin.iOS).}}&lt;br /&gt;
{{Attention|If possible, one should always favor designing the UI with less wrapping elements over turning on layout compression on unnecessary ones.}}&lt;br /&gt;
&lt;br /&gt;
=== General performance tips ===&lt;br /&gt;
* Reduce number of views per page&lt;br /&gt;
* Don’t bind things if they could be set static easily&lt;br /&gt;
* If you do not change the default, don’t set it explicit. For example, [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.StackLayout.Orientation?view=xamarin-forms Orientation of StackLayout] is “Vertical” by default. No need to set it manually if you don’t want to change it.&lt;br /&gt;
* Transparency is expensive.&lt;br /&gt;
* Do not put ListViews into ScrollViews.&lt;br /&gt;
* To stack elements, create a grid and add them to the same cell one after another. It’s cheaper than RelativeLayout.&lt;br /&gt;
* Use Margins instead of Paddings.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
* Choose correct Layout, e.g. no need to add a StackLayout if it only has 1 child.&lt;br /&gt;
* [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-options LayoutOptions].Fill or .FillAndExpand are best choice in most cases. And they are already default, so no need to set.&lt;br /&gt;
* Autosize of rows and columns in grids should used as few as possible.&lt;br /&gt;
* RelativeLayout is very expensive. Try to avoid.&lt;br /&gt;
* In StackLayout, make sure there is only 1 LayoutOptions Expand.&lt;br /&gt;
&lt;br /&gt;
=== Labels ===&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/text/label#formatted-text FormattedText] instead of multiple labels.&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.linebreakmode?view=xamarin-forms Linebreakmode] NoWrap (which is already the default).&lt;br /&gt;
* Avoid [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Label.VerticalTextAlignment?view=xamarin-forms VerticalTextAlignment]. Anyway, if needed, use VerticalTextAligment instead of &lt;br /&gt;
VerticalOptions.&lt;br /&gt;
* Use the &amp;quot;TextTransform&amp;quot; attribute to convert the value of the &amp;quot;Text&amp;quot; attribute to either uppercase or lowercase.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label&lt;br /&gt;
      TextTransform=&amp;quot;Uppercase&amp;quot;&lt;br /&gt;
      Text=&amp;quot;{Binding Properties.AllItems[DESCR].DisplayValue}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Images ===&lt;br /&gt;
* Provide images in optimized width and size. Provide multiple resolutions for different usage.&lt;br /&gt;
* Set [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Image.IsOpaque?view=xamarin-forms IsOpaque] to true if image is opaque.&lt;br /&gt;
&lt;br /&gt;
=== Layout compression examples ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource ChangedSymbol}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The code above removes one wrapping element added automatically by the ContentView and demonstrates a good reason to use layout compression because it can not be avoided otherwise.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid Margin=&amp;quot;2&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Margin=&amp;quot;5&amp;quot; Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This example, on the other hand, demonstrates a bad usage of layout compression because it can be easily achieved by better designs such as using only the Label with a merged margin.&lt;br /&gt;
&lt;br /&gt;
Sometimes the content inside a compressed layout appears on a wrong z-index level. For eample:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;BoxView CornerRadius=&amp;quot;14&amp;quot; HeightRequest=&amp;quot;28&amp;quot; WidthRequest=&amp;quot;28&amp;quot; Color=&amp;quot;Red&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource Badge}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView &amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
According to the order of the BoxView and the Label, the latter should appear on top of the former (later ones have higher z-index levels). However, this can be disturbed by layout compression, causing the exact opposite.&lt;br /&gt;
In this case, you can add a &amp;lt;code&amp;gt;xmlns:android=&amp;quot;clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core&amp;quot;&amp;lt;/code&amp;gt; namespace to your Xaml file and manually elevate the Label by specifying &amp;lt;code&amp;gt;android:VisualElement.Elevation=&amp;quot;X&amp;quot;&amp;lt;/code&amp;gt; on it accordingly (X is the delta of the z-index level you want).&lt;br /&gt;
&lt;br /&gt;
=== SfListViewExt ===&lt;br /&gt;
For performance reasons, we created an extended version of the Syncfusion SfListView control and it should be used for all lists in customizings. You need to add a namespace like &amp;lt;code&amp;gt;xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; to your Xaml file and use it like &amp;lt;code&amp;gt;&amp;lt;controls:SfListViewExt ... /&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{Hint|Technically speaking, SfListViewExt informs item view models when their corresponding item views appear on / disappear from the screen. This way, view models can skip a lot of unnecessary work (on the UI) when their views are not visible. '''If SfListView is used instead, the item views will not reflect content changes until the page is reloaded/refreshed.'''}}&lt;br /&gt;
&lt;br /&gt;
It is possible to configure the ListView, that the ScrollPosition is remembered when navigating away from the page, to do so, the property RembemberScrollPosition needs to be set to true. If unset, the value defaults to false and the scroll positions are not remembered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt RememberScrollPosition=&amp;quot;True&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using multiple Lists on one page (e.g. in a TabbedView), it is necessary to set the AutomationId property uniquely for each list on the page, to support the remembering of the ScrollPosition.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delay and LazyLoading ===&lt;br /&gt;
{{Attention|Although both properties can be set in XAML on the two controls, this should not be done. When both the LazyLoading and Delay properties are set, the Delay property is ignored in the code-behind, as otherwise it could lead to unexpected behavior and, in the worst case, result in performance degradation.}}&lt;br /&gt;
&lt;br /&gt;
==== Delay in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
More complex UIs create a delay in rendering which leads to a feeling of &amp;quot;unresponsiveness&amp;quot; when navigating through the client. This is because the app loads and displays everything at once, leading to a larger delay between triggering navigation and completion of page loading.&lt;br /&gt;
 &lt;br /&gt;
While the complexity of the UI directly affects the time taken to render it, the experience of responsiveness can be somewhat improved by actually adding a delay between the loading of the content page, and actual data content (properties, children, etc). By not loading both at once, resources are freed up in the app, leading to a quicker loading of the basic page. The content then loads in at its normal speed.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Starting from version 5.1, a small delay was introduced in the content heavy pages (child page, document page and query page). However, additional delays can also be applied to the custom UI at will, using a new property added to two existing controls used to insert UI templates: UBIKContentView and ContentControl. You can specify a delay (in milliseconds) on both controls so that the content of them is loaded after that amount of time. Examples are shown below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:ContentControl &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    ContentTemplate=&amp;quot;{Binding [UBIKNavigationBar], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hint|The delay won't have any effect if you specify the Content of the UBIKContentView control instead of its Converter, because the Content is immediately laid out by the XAML framework that way. If you don't need a converter to determine the actual template name dynamically, you can still use the TemplateConverter and specify the template name like the following so that the delay applies.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay applies ✅&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; ConverterParameter=&amp;quot;UBIKChildArea&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay doesn't apply ❌&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Content=&amp;quot;{Binding [UBIKChildArea], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Lazy Loading in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
To further improve performance, it is now possible to apply LazyLoading to UBIKContentView and ContentControl. &lt;br /&gt;
&lt;br /&gt;
When a ContentTemplate is assigned to either of these controls and the LazyLoading property is set to true, the content is only loaded when it is explicitly requested. The difference between this and simply controlling the IsVisible condition is that in the latter, resources are still consumed in constructing the UI element, even though it is not shown. Note that Lazy loading requires a trigger to determine when the content should be loaded, and the biggest benefit is experienced when complex elements, especially those hosting a ListView or some kind of object/property collection, are lazy-loaded. &lt;br /&gt;
&lt;br /&gt;
UBIKTabView is optimized to make use of the LazyLoading attribute when it is applied to tab content. Additionally, usage outside of UBIKTabView is possible, as the loading can be triggered as a behavior attached to any other control, such as a button with an IsClicked behavior handler. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UBIKTabView with LazyLoading'''&lt;br /&gt;
&lt;br /&gt;
When used in combination with UBIKTabView (by including the LazyLoading=True attribute on any UBIKContentView or ContentControl content of a tab item, as is now standard {{Version/MobileSince|5.1}}), only the content of the selected tab is rendered (by default, the first tab). The content of non-selected tabs is not. When switching tabs, UBIKTabView takes care of triggering the rendering of the content for the newly selected tab. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView &lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; &lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKPropertyArea&amp;quot; &lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:ContentControl &lt;br /&gt;
            ContentTemplate=&amp;quot;{DynamicResource MyTemplate}&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Using another control as a trigger for lazy loading'''&lt;br /&gt;
&lt;br /&gt;
Other controls (e.g., Button, CheckBox, etc.) can also serve as triggers for lazy loading. The benefit of this is that LazyLoading can still be applied to a complex UBIKContentView or ContentControl that is not hosted within a UBIKTabView. &lt;br /&gt;
&lt;br /&gt;
And example of a usecase is a togglebutton that reveals a section of content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
    &amp;lt;Grid RowDefinitions=&amp;quot;*,50,*&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView x:Name=&amp;quot;ChildContainer&amp;quot; Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;Button&lt;br /&gt;
            x:Name=&amp;quot;LoadDocuments&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;1&amp;quot;&lt;br /&gt;
            HeightRequest=&amp;quot;50&amp;quot;&lt;br /&gt;
            HorizontalOptions=&amp;quot;Center&amp;quot;&lt;br /&gt;
            Text=&amp;quot;LazyLoadDocuments&amp;quot;&lt;br /&gt;
            WidthRequest=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;Clicked&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;behaviors:InvokeMethodAction MethodName=&amp;quot;TriggerLazyLoad&amp;quot; TargetObject=&amp;quot;{Binding Source={x:Reference DocumentsAreaLoader}}&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;/Button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;controls:UBIKContentView&lt;br /&gt;
            x:Name=&amp;quot;DocumentsAreaLoader&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;2&amp;quot;&lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot;&lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKDocumentArea&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Known issues =&lt;br /&gt;
&lt;br /&gt;
=== Headlesslayout style in custom UBIKThemes causing problems ===&lt;br /&gt;
&lt;br /&gt;
In our default '''UBIKThemes''', we are currently using this style for a headless layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;HeadlessLayout&amp;quot; TargetType=&amp;quot;Layout&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;CompressedLayout.IsHeadless&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Setter.Value&amp;gt;&lt;br /&gt;
            &amp;lt;OnPlatform&lt;br /&gt;
                x:TypeArguments=&amp;quot;x:Boolean&amp;quot;&lt;br /&gt;
                Android=&amp;quot;True&amp;quot;&lt;br /&gt;
                WinPhone=&amp;quot;False&amp;quot;&lt;br /&gt;
                iOS=&amp;quot;False&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Setter.Value&amp;gt;&lt;br /&gt;
    &amp;lt;/Setter&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
This style is used for better UI performance on Android.&lt;br /&gt;
Using this style in a '''custom UBIKThemes''' could cause an exception &amp;amp; an app crash, or some objects to disappear.&lt;br /&gt;
The best case would be to '''not''' include it in the custom themes file, as it's unnecessary if you don't want to make any changes here.&lt;br /&gt;
&lt;br /&gt;
'''This issue is only known on Android tablet devices.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataTrigger Issues ===&lt;br /&gt;
==== Conflicting Triggers ====&lt;br /&gt;
DataTriggers in Mobile function better than the equivalent DataTriggerBehavior in UWP as they automatically handle the opposite case when a Boolean attribute value is set. This means that if a boolean DataTrigger is set, such as IsVisible=True, the False visibility will automatically be set if the Binding/Value condition is not met.&lt;br /&gt;
&lt;br /&gt;
However, this means that stacking multiple DataTriggers on the same attribute can lead to unexpected results. For this reason, it is recommended to use as few DataTriggers as possible. &lt;br /&gt;
* Avoid setting the same attribute more than once; do not set the same value as a default attribute and in the DataTrigger (ControlTemplate in the below example).&lt;br /&gt;
* Ideally, use only DataTriggers without a default ControlTemplate. This ensures that content is created only after the trigger evaluation is complete. If a default ControlTemplate is set, it is always loaded immediately, even if another template is applied right after.&lt;br /&gt;
* It is acceptable, but not recommended, to combine a single DataTrigger with an opposite default value, but only if the default value is different from all values set in triggers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Don't Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Instead Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Acceptable, but not recommended&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== DataTrigger to set Footer Properties in a ListView ====&lt;br /&gt;
&lt;br /&gt;
When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases.&lt;br /&gt;
It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty.&lt;br /&gt;
&lt;br /&gt;
If you encounter such an issue, please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger.&lt;br /&gt;
Also, new customizings should consider this workaround as a preventive action.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK IN CERTAIN CASES --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Incorrect glyphs may be shown on buttons ===&lt;br /&gt;
&lt;br /&gt;
When using glyphs on buttons in Mobile, sometimes a different glyph than the expected one will show up when viewing the app on Android.&lt;br /&gt;
They only seem to appear incorrectly when used as the Text property of the button (with FontFamily set to UBIKSymbols, such as the UBIKIconButton style.)&lt;br /&gt;
&lt;br /&gt;
If you encounter this issue please workaround by supplying the icon through the FontImageSource property of the button.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding BulkOperation.InvokeOnItemsCommand}&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;Button.ImageSource&amp;gt;&lt;br /&gt;
          &amp;lt;FontImageSource &lt;br /&gt;
               FontFamily=&amp;quot;{DynamicResource UBIKSymbols}&amp;quot;&lt;br /&gt;
               Glyph=&amp;quot;{x:Static resources:UBIKIcons.MobileDelete}&amp;quot;&lt;br /&gt;
               Color=&amp;quot;{DynamicResource UBIKDarkThemeColor}&amp;quot;&lt;br /&gt;
               Size=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.ImageSource&amp;gt;&lt;br /&gt;
     &amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
          &amp;lt;classes:KeyValueList&amp;gt;&lt;br /&gt;
                    &amp;lt;classes:KeyValueParameter Key=&amp;quot;Command&amp;quot; Value=&amp;quot;DiscardContentCommand&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/classes:KeyValueList&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Buttons and gesture recognizers ===&lt;br /&gt;
In Mobile XAML, you can use gesture recognizers on many UI elements such as a Grid to enable the latter to interact with user inputs.&lt;br /&gt;
&lt;br /&gt;
However, we've already made quite a lot of experience that gesture recognizers do not always work on Android and iOS when used on a Button control.&lt;br /&gt;
For example, the following Button won't properly invoke the command on said platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK!!! --&amp;gt;&lt;br /&gt;
&amp;lt;Button ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.GestureRecognizers&amp;gt;&lt;br /&gt;
        &amp;lt;TapGestureRecognizer Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.GestureRecognizers&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Therefore, you should always seek alternatives for Buttons.&lt;br /&gt;
'''If only one command is needed''', use the standard Command property on the Button, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; .../&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Or if multiple commands are needed, use Behaviors '''instead''', e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS ALSO WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button xmlns:behaviors=&amp;quot;clr-namespace:UBIK.CPL.Behaviors;assembly=UBIK.CPL&amp;quot; ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding NavigateBackCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== No dynamic reloading of Document Viewer ===&lt;br /&gt;
[[File:PDFViewerFixWiki.JPG]]&lt;br /&gt;
&lt;br /&gt;
In a customizing that combines a single-selection list of documents with some kind of viewer (especially UBIKDocumentContentArea), it is generally the case that switching the document causes the document viewer to then appear blank. The technical reason is that the PDFViewer used in the UBIKDocumentContentArea is not reloaded once the document content is reloaded. &lt;br /&gt;
&lt;br /&gt;
An easy fix is to apply a DataTrigger that unloads the ContentView when the document content is null, as the ContentView is forced to rerender itself when the trigger condition is no longer met.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Document Viewer --&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    x:Name=&amp;quot;DoucmentViewer&amp;quot; &lt;br /&gt;
    BindingContext=&amp;quot;{Binding SelectedItem, Source={x:Reference DocumentList}}&amp;quot;&lt;br /&gt;
    Content=&amp;quot;{Binding [UBIKDocumentContentArea], Source={x:Static services:TemplateService.Instance}}&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger TargetType=&amp;quot;controls:UBIKContentView&amp;quot; Binding=&amp;quot;{Binding SelectedItem.DocumentViewModel.DocumentContent, Source={x:Reference DocumentList}, Converter={StaticResource NullToBool}}&amp;quot; Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Content&amp;quot; Value=&amp;quot;{x:Null}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Issues with SfPullToRefresh in Mobile client {{Version/MobileSince|5.0}} ===&lt;br /&gt;
Due to a third-party issue, problems may occur on Mobile Android when using the SfPullToRefresh control in combination with the SfListViewExt. This can result in e.g. navigation or task interaction sometimes requiring multiple clicks.&lt;br /&gt;
In general, and due to more issues, it's not recommended to use the SfPullToRefresh control.&lt;br /&gt;
In our Mobile standard client, the PullToRefresh control has been replaced by a Refresh button in the Context Menu.&lt;br /&gt;
If you still decide to use SfPullToRefresh, there are a few points to consider:&lt;br /&gt;
&lt;br /&gt;
==== Avoid multiple SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue that causes the app to freeze, avoid placing more than one SfPullToRefresh controls as siblings in a xaml hierarchy. If switching between contents in a SfPullToRefresh control is necessary use separate DataTemplates for the contents and use e.g. a DataTrigger to set one of them as the ControlTemplate of a ContentControl inside the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_multiple_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
==== Avoid using SyncFusion ListViews directly in SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue on some Android devices that can cause some items in a SfListViewExt to be rendered incorrectly or not at all after triggering a PullToRefresh, avoid placing a SfListViewExt directly in a SfPullToRefresh control. Instead, wrap the ListView in a DataTemplate and use it in a ContentControl as a child of the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_using_SyncFusion_ListViews_directly_in_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
=== Tooltips not supported on some iOS devices {{Version/MobileSince|5.0}} ===&lt;br /&gt;
On iOS, native tooltips are only supported under very specific conditions. According to the official [https://learn.microsoft.com/en-us/dotnet/maui/user-interface/tooltips?view=net-maui-10.0| Microsoft documentation], tooltips are only shown when running the app on macOS with a pointer device. On physical iPhones and iPads, tooltips are generally not displayed. This means that using ToolTipProperties in XAML will not work reliably on iOS mobile devices.&lt;br /&gt;
&lt;br /&gt;
A possible workaround is to simulate tooltip behavior using a [https://help.syncfusion.com/maui/popup/overview| SfPopup control]. The idea is to use a tap interaction on the UI element (e.g., via a ''TappedBehavior'' with a ''SetPropertyAction'') that opens a Popup positioned relative to that element, and to automatically close the Popup after a short duration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- AFTER WORKAROUND --&amp;gt;&lt;br /&gt;
xmlns:sfPopup=&amp;quot;clr-namespace:Syncfusion.Maui.Popup;assembly=Syncfusion.Maui.Popup&amp;quot;&lt;br /&gt;
xmlns:behaviors=&amp;quot;clr-namespace:UBIK.MAUI.Behaviors;assembly=UBIK.MAUI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sfPopup:SfPopup&lt;br /&gt;
    x:Name=&amp;quot;TooltipTextPopup&amp;quot;&lt;br /&gt;
    AutoCloseDuration=&amp;quot;3000&amp;quot;&lt;br /&gt;
    RelativePosition=&amp;quot;AlignTop&amp;quot;&lt;br /&gt;
    RelativeView=&amp;quot;{x:Reference YourUIElement}&amp;quot;&lt;br /&gt;
    ShowHeader=&amp;quot;False&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;sfPopup:SfPopup.ContentTemplate&amp;gt;&lt;br /&gt;
        &amp;lt;DataTemplate&amp;gt;&lt;br /&gt;
                &amp;lt;Label Text=&amp;quot;This will be displayed as Tooltip text&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;
    &amp;lt;/sfPopup:SfPopup.ContentTemplate&amp;gt;&lt;br /&gt;
&amp;lt;/sfPopup:SfPopup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Border x:Name=&amp;quot;YourUIElement&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Border.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:TappedBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;behaviors:SetPropertyAction&lt;br /&gt;
                PropertyName=&amp;quot;IsOpen&amp;quot;&lt;br /&gt;
                TargetObject=&amp;quot;{Binding Source={x:Reference TooltipTextPopup}}&amp;quot;&lt;br /&gt;
                Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviors:TappedBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Border.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BEFORE WORKAROUND --&amp;gt;&lt;br /&gt;
&amp;lt;Border x:Name=&amp;quot;YourUIElement&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ToolTipProperties.Text&amp;gt;&lt;br /&gt;
         This will NOT be shown on iOS&lt;br /&gt;
    &amp;lt;/ToolTipProperties.Text&amp;gt;&lt;br /&gt;
&amp;lt;/Border&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
= UBIK Go (Maui) Customizing Guide {{Version/MobileSince|5.1}} =&lt;br /&gt;
The change to Maui was taken as an opportunity both to visually update the client's default UI, and to add some quality of life changes aiming to reduce the amount of customizing needed.&lt;br /&gt;
&lt;br /&gt;
This section describes the standard UI and how to more easily customize it.&lt;br /&gt;
&lt;br /&gt;
For differences between Xamarin and Maui, please refer to the [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] article.&lt;br /&gt;
&lt;br /&gt;
== XAML Changes And Improvements ==&lt;br /&gt;
=== Styles and Resources ===&lt;br /&gt;
* Various color elements were renamed for neutrality. This will help clarify the purpose of color themes, and make it easier to keep track of in customizings. The old versions are still available but moved to the Obsolete section of UBIKThemes. &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKDarkTextColor --&amp;gt; UBIKRegularTextColor&lt;br /&gt;
UBIKDarkThemeColor --&amp;gt; UBIKMainThemeColor&lt;br /&gt;
UBIKLightTextColor --&amp;gt; UBIKMainThemeContrastColor&lt;br /&gt;
UBIKLightThemeColor --&amp;gt; UBIKBasePageColor&lt;br /&gt;
UBIKSubtleTextColor --&amp;gt; UBIKMediumTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Furthermore, effort was made to create 'contrast pairs' throughout the client; for example, UBIKMainThemeContrastColor is defined primarily for texts layered on elements of UBIKMainThemeColor (such as the title bar and text). &lt;br /&gt;
** The intention here is that this pair can be safely customized with no surprises, that cannot be guaranteed when using non-paired resource. For example, UBIKMainThemeContrastColor  and UBIKBasePageColor are both white in the default customizing, but if UBIKBasePageColor that were to be layered over UBIKMainThemeColor, it would result in a black-on-black issue in a dark theme customizing. &lt;br /&gt;
** The 'pairs' are; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKMainThemeColor x UBIKMainThemeContrastColor&lt;br /&gt;
UBIKBasePageColor x UBIKRegularTextColor&lt;br /&gt;
UBIKButtonColor x UBIKButtonTextColor &lt;br /&gt;
UBIKButtonToggledColor x UBIKButtonToggledTextColor &lt;br /&gt;
UBIKPDFBaseColor x UBIKPDFTextColor&lt;br /&gt;
UBIKPDFSelectedToolColor x UBIKPDFSelectedToolTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* An effort was also made to avoid hardcoding numeric values on the client. Reusable resources were introduced instead; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonIconSize&amp;quot;&amp;gt;20&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonPanelSize&amp;quot;&amp;gt;56&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonSize&amp;quot;&amp;gt;44&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKListItemSize&amp;quot;&amp;gt;80&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKTileItemSize&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;120&amp;quot; Phone=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKCaptionTextSize&amp;quot;&amp;gt;14&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKBodyTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKTitleTextSize&amp;quot;&amp;gt;18&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKProgressBarHeight&amp;quot;&amp;gt;4&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptivePadding&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;8,0&amp;quot; Phone=&amp;quot;4,0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptiveSpacing&amp;quot; x:TypeArguments=&amp;quot;x:Double&amp;quot; Default=&amp;quot;16&amp;quot; Phone=&amp;quot;8&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regarding corporate colors, there are now additional resources to customize, aside from UBIKAccentColor;&lt;br /&gt;
** UBIKHighlightColor is a secondary accent color used for highlighting (eg. Multiselect mode or edited Property). {{Version/MobileSince|5.1.0.0}} Transparency has been added to the UBIKHighlightColor.&lt;br /&gt;
** UBIKGradientColor {{Version/MobileSince|5.1.0.0}} is used in combination with UBIKAccentColor to form a gradient on the Authentication area.&lt;br /&gt;
* As in WinX {{Version/WinXSince|4.0}}, the various possible object status indicators were exported to a template called '''StatusIndicators''' located in UBIKThemes. These are now displayed at the top right of the item template, with a semi-opaque underlay in case the indicators appear over Title/SubTitle text.&lt;br /&gt;
* '''SfTextInputLayout''' was introduced and is used in various locations (Authentication, and properties).&lt;br /&gt;
* Default values for size, font, color, etc, were applied to various controls (Picker, Entry etc) for consistency.&lt;br /&gt;
* New '''SfListView''' styles were introduced and the originals moved to the Obsolete section.&lt;br /&gt;
** The listview now has a background color (UBIKMediumElementColor) and child item templates are now responsible for providing their own background color (UBIKBasePageColor that is applied to the Grid style UBIKItemBase). &lt;br /&gt;
*** The intention is to provide visual distinction from actual list items and empty list 'space'.&lt;br /&gt;
*** However, this will interfere with lists that rely on the SelectionBackground to highlight selection. This is solved in various ways throughout the UI, such as the SelectedIndicator used in UBIKChildItem, or the seperate SelectedItem and SelectedItemTemplate templates used in UBIKEditGuid.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Adaptivity ===&lt;br /&gt;
- tbd.&lt;br /&gt;
&lt;br /&gt;
=== Layout and Functionality ===&lt;br /&gt;
* '''UBIKNavigationBar''' was introduced as a templatable alternative to the hardcoded context menu (accessed by the '...' button in the top right of the content area) and is fully customizable.&lt;br /&gt;
* Shadowed panels were introduced in place of floating buttons in the content tabs (Children, Properties). For consistency, both are located at the top of their respective tab content.&lt;br /&gt;
* '''UBIKChildItem''' was visually simplified. It now displays a simple icon, the Title (and MRO progress, if any) and Subtitle, and StatusIndicators in the top right. The progressbar is now displayed across the bottom of the item.&lt;br /&gt;
* '''UBIKTaskItem''' was completely redesigned. &lt;br /&gt;
** Aside from the StatusIndicators that appear in the top right uniformly on any context object, MRO-related ones (Task status (Finished, NA, or Not Necessary, Group Limit and Size, Previous Value, and Tech Indicator) appear on the top left contained in an SfChipGroup. &lt;br /&gt;
** The main area of the task item is previously split between Title and task-related input. On smaller devices or in editing regardless of screen size, the input area sizes becomes larger.&lt;br /&gt;
** The task related input now looks visually distinct with and without a value. UBIKButton(Text)Color is used for 'new' tasks, while UBIKButtonToggled(Text)Color is used for the 'value filled' state.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
* '''UBIKRootItem''' (formerly UBIKMainItem) was introduced simply so that the Title, Area, and Item are organized together within the default and customizing folders. For compatibility, UBIKMainItem still exists in the default folder, however, be aware that the listview in UBIKRootArea now requests UBIKRootItem as the ItemTemplate by default.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Customizing Guides ==&lt;br /&gt;
=== Dark Theme ===&lt;br /&gt;
While UBIK Go does not include a Dark Theme by default, a lot of effort was invested in optimizing the color resources used throughout the app, so that a dark theme can be quickly customized. Furthermore, below is a list of recommended changes that result in a functional dark theme.&lt;br /&gt;
&lt;br /&gt;
'''In UBIKThemes:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;x:String x:Key=&amp;quot;TextFontFamily&amp;quot;&amp;gt;InterL&amp;lt;/x:String&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the value for TextFontFamily with &amp;quot;InterL&amp;quot;; It is recommended to use a thinner font as white on black looks bolder than the inverse.&lt;br /&gt;
A 'Light' version of the default font font was added and can be accessed using the tag InterL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKRegularTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMediumTextColor&amp;quot;&amp;gt;#A3ffffff&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBasePageColor&amp;quot;&amp;gt;#3a3a3c&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMainThemeColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBorderColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKElementColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKLightElementColor&amp;quot;&amp;gt;#222124&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKFinishedElementColor&amp;quot;&amp;gt;#2a2a2b&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKOverlayElementColor&amp;quot;&amp;gt;#3D000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKImageOverlayColor&amp;quot;&amp;gt;#A3000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt; &lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledTextColor&amp;quot;&amp;gt;Black&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolTextColor&amp;quot;&amp;gt;#292929&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFBaseColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the above color resources (or similar).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Shadow&lt;br /&gt;
        x:Key=&amp;quot;UBIKPanelShadow&amp;quot;&lt;br /&gt;
        Brush=&amp;quot;Black&amp;quot; ... /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change the value for the attribute Brush to &amp;quot;Black&amp;quot; to darken the panel shadows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;&amp;gt;#636365&amp;lt;/Color&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;UBIKProgressBar&amp;quot; TargetType=&amp;quot;controls:ProgressBar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;StatusColor&amp;quot; Value=&amp;quot;{Binding ClassificationHandler.StatusColor, Converter={StaticResource IntToColor}, ConverterParameter={StaticResource UBIKProgressBarUndefinedStatuscolor}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The light theme uses UBIKElementColor for the progress bar color when none is defined on the server. However, this does not invert well in a dark theme. Therefore a new color resource should be introduced (&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;) and used in the ConverterParameter of the IntToColor converter, which does not accept a color hex code directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''In UBIKSplashArea:'''&lt;br /&gt;
&lt;br /&gt;
Follow the instructions embedded within the file to replace the splash image with a custom logo. Alternatively, simply adapt the Source attribute of the Image control to &amp;quot;splashlogoinverse.png&amp;quot; to apply an inversion of the UBIK Go logo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Increased FontSize ===&lt;br /&gt;
tbd.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29804</id>
		<title>Mobile XAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29804"/>
				<updated>2026-05-06T13:28:47Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Known issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The User Interface of the Mobile Clients (Android, iOS, Windows) can be fundamentally customized using custom XAML definitions. This customization process is heavily influenced by the [[XAML|XAML Customization Process on the WinX Client]].&lt;br /&gt;
&lt;br /&gt;
= Basics =&lt;br /&gt;
There are predefined XAML templates available that can be customized. If no customizing is found, the default templates will be used.&lt;br /&gt;
&lt;br /&gt;
== Default XAMLs ==&lt;br /&gt;
All default XAML templates that can be customized are available through the Mobile Windows client. You need to go to the app settings and click the &amp;quot;Unpack default XAMLs&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== Differences to WinX/UWP ==&lt;br /&gt;
* Since it's based on the Mobile XAML dialect, you CANNOT use any existing XAML customizings for the WinX/UWP app;&lt;br /&gt;
* Namespace definitions must include the corresponding assembly names;&lt;br /&gt;
* XAML template files have the extension name of '''xamlx''' instead of '''xaml''';&lt;br /&gt;
* You can deploy only those resources that you want to customize. (This is also the case for newer versions of WinX/UWP. {{Version/WinXSince|3.6}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overriding default XAMLs=&lt;br /&gt;
On Windows (WinX/UWP), the &amp;lt;code&amp;gt;[App Package Folder]/LocalState/xaml/&amp;lt;/code&amp;gt; folder can be accessed by the user and the customized XAML files directly added. An alternative to this on all platforms (including Android, iOS, etc.) is to use the ''Import Customizing'' button in the app settings to import the templates, styles, images, etc. (file by file, or all files within a zip package). The changes should be reflected in the UI (except the current page) without restarting the app. After directly editing the customizings (Mobile Windows), you can also use the &amp;quot;Reload customizing&amp;quot; button without restarting the app.&lt;br /&gt;
&lt;br /&gt;
In the following, we're going to override the default light theme color of the app:&lt;br /&gt;
* Unpack the default XAMLs;&lt;br /&gt;
* Pick and deploy the default UBIKThemes.xamlx to the '''xaml''' folder inside the ''LocalState'' folder;&lt;br /&gt;
* Open it with the text editor of your choice and remove everything within the '''ResouceDictionary''' except &amp;lt;code&amp;gt;&amp;lt;Color x:Key=&amp;quot;UBIKLightThemeColor&amp;quot;&amp;gt;blue&amp;lt;/Color&amp;gt;&amp;lt;/code&amp;gt;;&lt;br /&gt;
* Save the changes and reload. You should see changes successfully implemented.&lt;br /&gt;
&lt;br /&gt;
{{Attention| For maintainability reasons, it's HIGHLY recommended to deploy only those XAML resources you want to override. For example, if you only want to customize the UBIKChildArea, don't deploy others like the UBIKMenuArea. If you only want to customize the UBIKChildItem, that's the only content you should include in the UBIKThemes.}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Templates ==&lt;br /&gt;
Custom templates can be added, just like on the WinX/UWP client. Make sure to include all '''namespace definitions''' (as attributes of the '''ContentView''' tag), otherwise the custom template will not load.&lt;br /&gt;
&lt;br /&gt;
Similar to the ''UBIKThemes.xamlx'' file, custom or overridden templates start with a &amp;lt;code&amp;gt;&amp;lt;ContentView&amp;gt;&amp;lt;/code&amp;gt; tag containing all '''namespaces'''. &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; takes a '''ResourceDictionary''' and contains resources like references to converters. Finally, &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; contains the actual layout content (it's best to start with a '''Grid'''). Again, don't forget to add namespaces that you need!&lt;br /&gt;
&lt;br /&gt;
Templates can also be defined in ''UBIKThemes.xamlx''. In this case, they need to be added into the &amp;lt;code&amp;gt;&amp;lt;ResourceDictionary&amp;gt;&amp;lt;/code&amp;gt; inside the &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; template as a &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt;. Similarly, if you want to split up the templates into seperate files, you need to make sure to follow the steps mentioned above and get the content of the &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt; into the &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
{{Attention|Templates defined in separate files will override templates defined in the ''UBIKThemes.xamlx''!}}&lt;br /&gt;
&lt;br /&gt;
=== Bindings in resources ===&lt;br /&gt;
When using bindings such as [[Xamarin_XAML#Content_filtering|this]] in a resource located in a custom template, it is necessary to place the template in a UBIKContentView.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, this is because bindable objects in the ResourceDictionary of a ContentView (the custom template) don't automatically inherit the BindingContext from the container/parent view. UBIKContentView is created to additionally do that.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- UBIKCustomView.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt... ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Container where UBIKCustomView is placed, e.g. UBIKChildArea.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;controls:UBIKContentView Content=&amp;quot;{Binding [UBIKCustomView], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding Images ==&lt;br /&gt;
Images can't be loaded with the default '''Image''' tag, as the image is on different paths on each operating system.&lt;br /&gt;
&lt;br /&gt;
Therefore, there's a custom '''FileImage''' that internally overrides the default ''Image'' with two custom parameters:&lt;br /&gt;
* '''FolderName''' ...The name of the '''folder''' in the '''local folder'''. Only the first level inside the ''LocalState'' folder seems to work.&lt;br /&gt;
* '''FileName''' ...The name of the '''file''' in the said folder. &lt;br /&gt;
&lt;br /&gt;
Make sure to implement the proper namespace as well by adding&lt;br /&gt;
&amp;lt;code&amp;gt;xmlns:fimage=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; into the root item's attributes.&lt;br /&gt;
&lt;br /&gt;
Then, the image can be loaded using:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fimage:FileImage FileName=&amp;quot;image.png&amp;quot; FolderName=&amp;quot;xaml&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This snipped loads the image called '''image.png''' located in the '''xaml''' folder inside the ''LocalState''.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the ''FileImage'' tag doesn't seem to support most attributes. Therefore place it inside a '''Grid''' to achieve a perfect layout.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Icons ==&lt;br /&gt;
Moved to article [[XAML_Tips#Custom_Icons]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Converters==&lt;br /&gt;
:''Main Page: [[Converters_In_Mobile]]''&lt;br /&gt;
&lt;br /&gt;
They are used to convert specific data into some desired output, using custom logic. &lt;br /&gt;
&lt;br /&gt;
Consider the following example:&amp;lt;br/&amp;gt;&lt;br /&gt;
A label saying ''There are no children items available!'' should only be visible if the number of children-items is 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Advanced =&lt;br /&gt;
&lt;br /&gt;
== Feature related ==&lt;br /&gt;
&lt;br /&gt;
=== Customizing Menu Button {{Version/XamarinSince|4.6.0}} === &lt;br /&gt;
&lt;br /&gt;
For the Mobile Client, it is possible to show/hide the '''Menu button''' of the client.&amp;lt;br&amp;gt;&lt;br /&gt;
To customize the visibility of the '''Menu button''' you have to edit the default XAML '''Themes''' file.&lt;br /&gt;
&lt;br /&gt;
* Search for &amp;quot;'''ShowMenuToolBar'''&amp;quot; in the Themes file.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If there isn't any &amp;quot;'''ShowMenuToolBar'''&amp;quot; in your XAML Themes file, you just have to create one, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Boolean x:Key=&amp;quot;ShowMenuToolBar&amp;quot;&amp;gt;true&amp;lt;/x:Boolean&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the value to &amp;quot;true&amp;quot; to show the '''Menu button''' (default value).&lt;br /&gt;
* Set the value to &amp;quot;false&amp;quot; to hide the '''Menu button'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
File:menu_button_show.png|Menu Button shown&lt;br /&gt;
File:menu_button_hiddenV3.png|Menu Button hidden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Content filtering ===&lt;br /&gt;
For the Mobile clients, an &amp;quot;SfDataSourceExt&amp;quot; type is available for filtering list of items using defined expressions.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following example demonstrates how to filter for child items having certain property values. The filtered list and its count can be displayed in the UI.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&lt;br /&gt;
    ...&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;x:String x:Key=&amp;quot;Expresssion&amp;quot;&amp;gt;Item.Values[&amp;amp;quot;MP_YEAR&amp;amp;quot;].Contains(&amp;amp;quot;2019&amp;amp;quot;)&amp;lt;/x:String&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt  x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource Expresssion}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; Unloaded=&amp;quot;{Binding SkipFiltering}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;StackLayout Orientation=&amp;quot;Vertical&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Label Text=&amp;quot;{Binding DisplayItemsCount, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;controls:SfListViewExt ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/StackLayout&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notes on using bindings in ResourceDictionary ====&lt;br /&gt;
In the example shown above, you can see &amp;lt;code&amp;gt;{Binding Children.Items}&amp;lt;/code&amp;gt; is used. For this to work, the SfDataSourceExt control inside the ResourceDictionary must inherit the binding data context properly.&lt;br /&gt;
* In this case, that data context comes from where this template (UBIKChildArea.xamlx) is used, namely the UBIKContentArea.xamlx;&lt;br /&gt;
* When referencing this template in a ContentView control, the binding data context is '''NOT''' automatically inherited by the controls inside the ResourceDictioinary;&lt;br /&gt;
* That's why we use a UBIKContentView control instead. You can find its example usage in the default UBIKContentArea.xamlx template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Search ===&lt;br /&gt;
In the default UBIKMenuArea.xamlx (where the search UI is hosted), there are two commands associated with two events. See below.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SearchBar ...&amp;gt;&lt;br /&gt;
    &amp;lt;SearchBar.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior&lt;br /&gt;
            Command=&amp;quot;{Binding FreeTextSearchCommand}&amp;quot;&lt;br /&gt;
            CommandParameter=&amp;quot;{Binding Path=Text, Source={x:Reference SearchField}}&amp;quot;&lt;br /&gt;
            EventName=&amp;quot;SearchButtonPressed&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding DelayedFreeTextSearchCommand}&amp;quot; EventName=&amp;quot;TextChanged&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/SearchBar.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/SearchBar&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;SearchButtonPressed&amp;lt;/code&amp;gt; is responsible for executing searches after the user confirms the input (e.g. pressing {{{keypress|Enter}}} or the search button).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;TextChanged&amp;lt;/code&amp;gt; is responsible for the &amp;quot;search as you type&amp;quot; behavior. Namely it triggers an automatic search shortly (half second) after the user stops changing the text in the search bar. It can be turned off by simply removing that particular behavior.&lt;br /&gt;
&lt;br /&gt;
=== DisplayViewCommand ===&lt;br /&gt;
This command can be used to [[Custom_View_(Client)|display custom views]].&lt;br /&gt;
&lt;br /&gt;
=== Flashlight  {{Version/MobileSince|5.1.0}}  ===&lt;br /&gt;
For the Mobile clients, it is possible to control the system flashlight via customizing and switch it on or off.&lt;br /&gt;
&lt;br /&gt;
The available properties can, for example, be bound to a Switch or CheckBox, as demonstrated below. These properties allow you to:&lt;br /&gt;
* Determine whether the device supports flashlight functionality (IsFlashSupported)&lt;br /&gt;
* Check whether the flashlight is currently turned on or off (IsFlashEnabled)&lt;br /&gt;
* Toggle the flashlight on or off via user interaction (SwitchFlashLight) &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If an attempt is made to enable the flashlight on a device that does not provide flashlight support, no action is performed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Switch&lt;br /&gt;
! controls:CheckBox&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Switch IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
        IsToggled=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:CheckBox&lt;br /&gt;
    x:Name=&amp;quot;PropertyToggle&amp;quot;&lt;br /&gt;
    CheckSymbol=&amp;quot;&amp;amp;#x1F526;&amp;quot;&lt;br /&gt;
    IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
    IsChecked=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKIconToggleButton}&amp;quot;&lt;br /&gt;
    SymbolSize=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger&lt;br /&gt;
            Binding=&amp;quot;{Binding AppStatus.IsFlashEnabled}&amp;quot;&lt;br /&gt;
            TargetType=&amp;quot;controls:CheckBox&amp;quot;&lt;br /&gt;
            Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Background&amp;quot; Value=&amp;quot;{StaticResource UBIKAccentColor}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
   &amp;lt;/controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:CheckBox&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
To get a good performance in the app UI when using your Xaml customizings, it is recommended to try the following.&lt;br /&gt;
* Always keep your UI structure simple. Choose the most efficient layouts for the scenarios and avoid unnecessary UI elements. Please refer to [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#choose-the-correct-layout &amp;quot;choose the correct layout&amp;quot;] and [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#reduce-the-visual-tree-size &amp;quot;reduce the visual tree size&amp;quot;];&lt;br /&gt;
* Turn on [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-compression layout compression] on wrapping elements that don't have any visual parameters set (reasons stated in the linked documentation).&lt;br /&gt;
{{Hint|There is a default &amp;quot;HeadlessLayout&amp;quot; style available in the app you can use on elements such as Grids, StackLayouts, ContentViews, etc. It turns on [[Xamarin_XAML#Layout_compression_examples|layout compression]] on the applied elements in Xamarin.Android (since we find it not worth the effort in Xamarin.iOS).}}&lt;br /&gt;
{{Attention|If possible, one should always favor designing the UI with less wrapping elements over turning on layout compression on unnecessary ones.}}&lt;br /&gt;
&lt;br /&gt;
=== General performance tips ===&lt;br /&gt;
* Reduce number of views per page&lt;br /&gt;
* Don’t bind things if they could be set static easily&lt;br /&gt;
* If you do not change the default, don’t set it explicit. For example, [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.StackLayout.Orientation?view=xamarin-forms Orientation of StackLayout] is “Vertical” by default. No need to set it manually if you don’t want to change it.&lt;br /&gt;
* Transparency is expensive.&lt;br /&gt;
* Do not put ListViews into ScrollViews.&lt;br /&gt;
* To stack elements, create a grid and add them to the same cell one after another. It’s cheaper than RelativeLayout.&lt;br /&gt;
* Use Margins instead of Paddings.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
* Choose correct Layout, e.g. no need to add a StackLayout if it only has 1 child.&lt;br /&gt;
* [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-options LayoutOptions].Fill or .FillAndExpand are best choice in most cases. And they are already default, so no need to set.&lt;br /&gt;
* Autosize of rows and columns in grids should used as few as possible.&lt;br /&gt;
* RelativeLayout is very expensive. Try to avoid.&lt;br /&gt;
* In StackLayout, make sure there is only 1 LayoutOptions Expand.&lt;br /&gt;
&lt;br /&gt;
=== Labels ===&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/text/label#formatted-text FormattedText] instead of multiple labels.&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.linebreakmode?view=xamarin-forms Linebreakmode] NoWrap (which is already the default).&lt;br /&gt;
* Avoid [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Label.VerticalTextAlignment?view=xamarin-forms VerticalTextAlignment]. Anyway, if needed, use VerticalTextAligment instead of &lt;br /&gt;
VerticalOptions.&lt;br /&gt;
* Use the &amp;quot;TextTransform&amp;quot; attribute to convert the value of the &amp;quot;Text&amp;quot; attribute to either uppercase or lowercase.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label&lt;br /&gt;
      TextTransform=&amp;quot;Uppercase&amp;quot;&lt;br /&gt;
      Text=&amp;quot;{Binding Properties.AllItems[DESCR].DisplayValue}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Images ===&lt;br /&gt;
* Provide images in optimized width and size. Provide multiple resolutions for different usage.&lt;br /&gt;
* Set [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Image.IsOpaque?view=xamarin-forms IsOpaque] to true if image is opaque.&lt;br /&gt;
&lt;br /&gt;
=== Layout compression examples ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource ChangedSymbol}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The code above removes one wrapping element added automatically by the ContentView and demonstrates a good reason to use layout compression because it can not be avoided otherwise.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid Margin=&amp;quot;2&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Margin=&amp;quot;5&amp;quot; Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This example, on the other hand, demonstrates a bad usage of layout compression because it can be easily achieved by better designs such as using only the Label with a merged margin.&lt;br /&gt;
&lt;br /&gt;
Sometimes the content inside a compressed layout appears on a wrong z-index level. For eample:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;BoxView CornerRadius=&amp;quot;14&amp;quot; HeightRequest=&amp;quot;28&amp;quot; WidthRequest=&amp;quot;28&amp;quot; Color=&amp;quot;Red&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource Badge}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView &amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
According to the order of the BoxView and the Label, the latter should appear on top of the former (later ones have higher z-index levels). However, this can be disturbed by layout compression, causing the exact opposite.&lt;br /&gt;
In this case, you can add a &amp;lt;code&amp;gt;xmlns:android=&amp;quot;clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core&amp;quot;&amp;lt;/code&amp;gt; namespace to your Xaml file and manually elevate the Label by specifying &amp;lt;code&amp;gt;android:VisualElement.Elevation=&amp;quot;X&amp;quot;&amp;lt;/code&amp;gt; on it accordingly (X is the delta of the z-index level you want).&lt;br /&gt;
&lt;br /&gt;
=== SfListViewExt ===&lt;br /&gt;
For performance reasons, we created an extended version of the Syncfusion SfListView control and it should be used for all lists in customizings. You need to add a namespace like &amp;lt;code&amp;gt;xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; to your Xaml file and use it like &amp;lt;code&amp;gt;&amp;lt;controls:SfListViewExt ... /&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{Hint|Technically speaking, SfListViewExt informs item view models when their corresponding item views appear on / disappear from the screen. This way, view models can skip a lot of unnecessary work (on the UI) when their views are not visible. '''If SfListView is used instead, the item views will not reflect content changes until the page is reloaded/refreshed.'''}}&lt;br /&gt;
&lt;br /&gt;
It is possible to configure the ListView, that the ScrollPosition is remembered when navigating away from the page, to do so, the property RembemberScrollPosition needs to be set to true. If unset, the value defaults to false and the scroll positions are not remembered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt RememberScrollPosition=&amp;quot;True&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using multiple Lists on one page (e.g. in a TabbedView), it is necessary to set the AutomationId property uniquely for each list on the page, to support the remembering of the ScrollPosition.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delay and LazyLoading ===&lt;br /&gt;
{{Attention|Although both properties can be set in XAML on the two controls, this should not be done. When both the LazyLoading and Delay properties are set, the Delay property is ignored in the code-behind, as otherwise it could lead to unexpected behavior and, in the worst case, result in performance degradation.}}&lt;br /&gt;
&lt;br /&gt;
==== Delay in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
More complex UIs create a delay in rendering which leads to a feeling of &amp;quot;unresponsiveness&amp;quot; when navigating through the client. This is because the app loads and displays everything at once, leading to a larger delay between triggering navigation and completion of page loading.&lt;br /&gt;
 &lt;br /&gt;
While the complexity of the UI directly affects the time taken to render it, the experience of responsiveness can be somewhat improved by actually adding a delay between the loading of the content page, and actual data content (properties, children, etc). By not loading both at once, resources are freed up in the app, leading to a quicker loading of the basic page. The content then loads in at its normal speed.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Starting from version 5.1, a small delay was introduced in the content heavy pages (child page, document page and query page). However, additional delays can also be applied to the custom UI at will, using a new property added to two existing controls used to insert UI templates: UBIKContentView and ContentControl. You can specify a delay (in milliseconds) on both controls so that the content of them is loaded after that amount of time. Examples are shown below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:ContentControl &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    ContentTemplate=&amp;quot;{Binding [UBIKNavigationBar], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hint|The delay won't have any effect if you specify the Content of the UBIKContentView control instead of its Converter, because the Content is immediately laid out by the XAML framework that way. If you don't need a converter to determine the actual template name dynamically, you can still use the TemplateConverter and specify the template name like the following so that the delay applies.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay applies ✅&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; ConverterParameter=&amp;quot;UBIKChildArea&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay doesn't apply ❌&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Content=&amp;quot;{Binding [UBIKChildArea], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Lazy Loading in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
To further improve performance, it is now possible to apply LazyLoading to UBIKContentView and ContentControl. &lt;br /&gt;
&lt;br /&gt;
When a ContentTemplate is assigned to either of these controls and the LazyLoading property is set to true, the content is only loaded when it is explicitly requested. The difference between this and simply controlling the IsVisible condition is that in the latter, resources are still consumed in constructing the UI element, even though it is not shown. Note that Lazy loading requires a trigger to determine when the content should be loaded, and the biggest benefit is experienced when complex elements, especially those hosting a ListView or some kind of object/property collection, are lazy-loaded. &lt;br /&gt;
&lt;br /&gt;
UBIKTabView is optimized to make use of the LazyLoading attribute when it is applied to tab content. Additionally, usage outside of UBIKTabView is possible, as the loading can be triggered as a behavior attached to any other control, such as a button with an IsClicked behavior handler. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UBIKTabView with LazyLoading'''&lt;br /&gt;
&lt;br /&gt;
When used in combination with UBIKTabView (by including the LazyLoading=True attribute on any UBIKContentView or ContentControl content of a tab item, as is now standard {{Version/MobileSince|5.1}}), only the content of the selected tab is rendered (by default, the first tab). The content of non-selected tabs is not. When switching tabs, UBIKTabView takes care of triggering the rendering of the content for the newly selected tab. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView &lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; &lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKPropertyArea&amp;quot; &lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:ContentControl &lt;br /&gt;
            ContentTemplate=&amp;quot;{DynamicResource MyTemplate}&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Using another control as a trigger for lazy loading'''&lt;br /&gt;
&lt;br /&gt;
Other controls (e.g., Button, CheckBox, etc.) can also serve as triggers for lazy loading. The benefit of this is that LazyLoading can still be applied to a complex UBIKContentView or ContentControl that is not hosted within a UBIKTabView. &lt;br /&gt;
&lt;br /&gt;
And example of a usecase is a togglebutton that reveals a section of content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
    &amp;lt;Grid RowDefinitions=&amp;quot;*,50,*&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView x:Name=&amp;quot;ChildContainer&amp;quot; Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;Button&lt;br /&gt;
            x:Name=&amp;quot;LoadDocuments&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;1&amp;quot;&lt;br /&gt;
            HeightRequest=&amp;quot;50&amp;quot;&lt;br /&gt;
            HorizontalOptions=&amp;quot;Center&amp;quot;&lt;br /&gt;
            Text=&amp;quot;LazyLoadDocuments&amp;quot;&lt;br /&gt;
            WidthRequest=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;Clicked&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;behaviors:InvokeMethodAction MethodName=&amp;quot;TriggerLazyLoad&amp;quot; TargetObject=&amp;quot;{Binding Source={x:Reference DocumentsAreaLoader}}&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;/Button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;controls:UBIKContentView&lt;br /&gt;
            x:Name=&amp;quot;DocumentsAreaLoader&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;2&amp;quot;&lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot;&lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKDocumentArea&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Known issues =&lt;br /&gt;
&lt;br /&gt;
=== Headlesslayout style in custom UBIKThemes causing problems ===&lt;br /&gt;
&lt;br /&gt;
In our default '''UBIKThemes''', we are currently using this style for a headless layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;HeadlessLayout&amp;quot; TargetType=&amp;quot;Layout&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;CompressedLayout.IsHeadless&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Setter.Value&amp;gt;&lt;br /&gt;
            &amp;lt;OnPlatform&lt;br /&gt;
                x:TypeArguments=&amp;quot;x:Boolean&amp;quot;&lt;br /&gt;
                Android=&amp;quot;True&amp;quot;&lt;br /&gt;
                WinPhone=&amp;quot;False&amp;quot;&lt;br /&gt;
                iOS=&amp;quot;False&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Setter.Value&amp;gt;&lt;br /&gt;
    &amp;lt;/Setter&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
This style is used for better UI performance on Android.&lt;br /&gt;
Using this style in a '''custom UBIKThemes''' could cause an exception &amp;amp; an app crash, or some objects to disappear.&lt;br /&gt;
The best case would be to '''not''' include it in the custom themes file, as it's unnecessary if you don't want to make any changes here.&lt;br /&gt;
&lt;br /&gt;
'''This issue is only known on Android tablet devices.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataTrigger Issues ===&lt;br /&gt;
==== Conflicting Triggers ====&lt;br /&gt;
DataTriggers in Mobile function better than the equivalent DataTriggerBehavior in UWP as they automatically handle the opposite case when a Boolean attribute value is set. This means that if a boolean DataTrigger is set, such as IsVisible=True, the False visibility will automatically be set if the Binding/Value condition is not met.&lt;br /&gt;
&lt;br /&gt;
However, this means that stacking multiple DataTriggers on the same attribute can lead to unexpected results. For this reason, it is recommended to use as few DataTriggers as possible. &lt;br /&gt;
* Avoid setting the same attribute more than once; do not set the same value as a default attribute and in the DataTrigger (ControlTemplate in the below example).&lt;br /&gt;
* Ideally, use only DataTriggers without a default ControlTemplate. This ensures that content is created only after the trigger evaluation is complete. If a default ControlTemplate is set, it is always loaded immediately, even if another template is applied right after.&lt;br /&gt;
* It is acceptable, but not recommended, to combine a single DataTrigger with an opposite default value, but only if the default value is different from all values set in triggers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Don't Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Instead Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Acceptable, but not recommended&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== DataTrigger to set Footer Properties in a ListView ====&lt;br /&gt;
&lt;br /&gt;
When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases.&lt;br /&gt;
It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty.&lt;br /&gt;
&lt;br /&gt;
If you encounter such an issue, please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger.&lt;br /&gt;
Also, new customizings should consider this workaround as a preventive action.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK IN CERTAIN CASES --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Incorrect glyphs may be shown on buttons ===&lt;br /&gt;
&lt;br /&gt;
When using glyphs on buttons in Mobile, sometimes a different glyph than the expected one will show up when viewing the app on Android.&lt;br /&gt;
They only seem to appear incorrectly when used as the Text property of the button (with FontFamily set to UBIKSymbols, such as the UBIKIconButton style.)&lt;br /&gt;
&lt;br /&gt;
If you encounter this issue please workaround by supplying the icon through the FontImageSource property of the button.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding BulkOperation.InvokeOnItemsCommand}&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;Button.ImageSource&amp;gt;&lt;br /&gt;
          &amp;lt;FontImageSource &lt;br /&gt;
               FontFamily=&amp;quot;{DynamicResource UBIKSymbols}&amp;quot;&lt;br /&gt;
               Glyph=&amp;quot;{x:Static resources:UBIKIcons.MobileDelete}&amp;quot;&lt;br /&gt;
               Color=&amp;quot;{DynamicResource UBIKDarkThemeColor}&amp;quot;&lt;br /&gt;
               Size=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.ImageSource&amp;gt;&lt;br /&gt;
     &amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
          &amp;lt;classes:KeyValueList&amp;gt;&lt;br /&gt;
                    &amp;lt;classes:KeyValueParameter Key=&amp;quot;Command&amp;quot; Value=&amp;quot;DiscardContentCommand&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/classes:KeyValueList&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Buttons and gesture recognizers ===&lt;br /&gt;
In Mobile XAML, you can use gesture recognizers on many UI elements such as a Grid to enable the latter to interact with user inputs.&lt;br /&gt;
&lt;br /&gt;
However, we've already made quite a lot of experience that gesture recognizers do not always work on Android and iOS when used on a Button control.&lt;br /&gt;
For example, the following Button won't properly invoke the command on said platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK!!! --&amp;gt;&lt;br /&gt;
&amp;lt;Button ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.GestureRecognizers&amp;gt;&lt;br /&gt;
        &amp;lt;TapGestureRecognizer Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.GestureRecognizers&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Therefore, you should always seek alternatives for Buttons.&lt;br /&gt;
'''If only one command is needed''', use the standard Command property on the Button, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; .../&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Or if multiple commands are needed, use Behaviors '''instead''', e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS ALSO WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button xmlns:behaviors=&amp;quot;clr-namespace:UBIK.CPL.Behaviors;assembly=UBIK.CPL&amp;quot; ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding NavigateBackCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== No dynamic reloading of Document Viewer ===&lt;br /&gt;
[[File:PDFViewerFixWiki.JPG]]&lt;br /&gt;
&lt;br /&gt;
In a customizing that combines a single-selection list of documents with some kind of viewer (especially UBIKDocumentContentArea), it is generally the case that switching the document causes the document viewer to then appear blank. The technical reason is that the PDFViewer used in the UBIKDocumentContentArea is not reloaded once the document content is reloaded. &lt;br /&gt;
&lt;br /&gt;
An easy fix is to apply a DataTrigger that unloads the ContentView when the document content is null, as the ContentView is forced to rerender itself when the trigger condition is no longer met.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Document Viewer --&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    x:Name=&amp;quot;DoucmentViewer&amp;quot; &lt;br /&gt;
    BindingContext=&amp;quot;{Binding SelectedItem, Source={x:Reference DocumentList}}&amp;quot;&lt;br /&gt;
    Content=&amp;quot;{Binding [UBIKDocumentContentArea], Source={x:Static services:TemplateService.Instance}}&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger TargetType=&amp;quot;controls:UBIKContentView&amp;quot; Binding=&amp;quot;{Binding SelectedItem.DocumentViewModel.DocumentContent, Source={x:Reference DocumentList}, Converter={StaticResource NullToBool}}&amp;quot; Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Content&amp;quot; Value=&amp;quot;{x:Null}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Issues with SfPullToRefresh in Mobile client {{Version/MobileSince|5.0}} ===&lt;br /&gt;
Due to a third-party issue, problems may occur on Mobile Android when using the SfPullToRefresh control in combination with the SfListViewExt. This can result in e.g. navigation or task interaction sometimes requiring multiple clicks.&lt;br /&gt;
In general, and due to more issues, it's not recommended to use the SfPullToRefresh control.&lt;br /&gt;
In our Mobile standard client, the PullToRefresh control has been replaced by a Refresh button in the Context Menu.&lt;br /&gt;
If you still decide to use SfPullToRefresh, there are a few points to consider:&lt;br /&gt;
&lt;br /&gt;
==== Avoid multiple SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue that causes the app to freeze, avoid placing more than one SfPullToRefresh controls as siblings in a xaml hierarchy. If switching between contents in a SfPullToRefresh control is necessary use separate DataTemplates for the contents and use e.g. a DataTrigger to set one of them as the ControlTemplate of a ContentControl inside the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_multiple_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
==== Avoid using SyncFusion ListViews directly in SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue on some Android devices that can cause some items in a SfListViewExt to be rendered incorrectly or not at all after triggering a PullToRefresh, avoid placing a SfListViewExt directly in a SfPullToRefresh control. Instead, wrap the ListView in a DataTemplate and use it in a ContentControl as a child of the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_using_SyncFusion_ListViews_directly_in_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
=== Tooltips not supported on some iOS devices {{Version/MobileSince|5.0}} ===&lt;br /&gt;
On iOS, native tooltips are only supported under very specific conditions. According to the official [https://learn.microsoft.com/en-us/dotnet/maui/user-interface/tooltips?view=net-maui-10.0| Microsoft documentation], tooltips are only shown when running the app on macOS with a pointer device. On physical iPhones and iPads, tooltips are generally not displayed. This means that using ToolTipProperties in XAML will not work reliably on iOS mobile devices.&lt;br /&gt;
&lt;br /&gt;
A possible workaround is to simulate tooltip behavior using a [https://help.syncfusion.com/maui/popup/overview| SfPopup control]. The idea is to use a tap interaction on the UI element (e.g., via a ''TappedBehavior'' with a ''SetPropertyAction'') that opens a Popup positioned relative to that element, and to automatically close the Popup after a short duration.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- AFTER WORKAROUND --&amp;gt;&lt;br /&gt;
xmlns:sfPopup=&amp;quot;clr-namespace:Syncfusion.Maui.Popup;assembly=Syncfusion.Maui.Popup&amp;quot;&lt;br /&gt;
xmlns:behaviors=&amp;quot;clr-namespace:UBIK.MAUI.Behaviors;assembly=UBIK.MAUI&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sfPopup:SfPopup&lt;br /&gt;
    x:Name=&amp;quot;TooltipTextPopup&amp;quot;&lt;br /&gt;
    AutoCloseDuration=&amp;quot;3000&amp;quot;&lt;br /&gt;
    RelativePosition=&amp;quot;AlignTop&amp;quot;&lt;br /&gt;
    RelativeView=&amp;quot;{x:Reference YourUIElement}&amp;quot;&lt;br /&gt;
    ShowHeader=&amp;quot;False&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;sfPopup:SfPopup.ContentTemplate&amp;gt;&lt;br /&gt;
        &amp;lt;DataTemplate&amp;gt;&lt;br /&gt;
                &amp;lt;Label Text=&amp;quot;This will be displayed as Tooltip text&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTemplate&amp;gt;&lt;br /&gt;
    &amp;lt;/sfPopup:SfPopup.ContentTemplate&amp;gt;&lt;br /&gt;
&amp;lt;/sfPopup:SfPopup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Border x:Name=&amp;quot;YourUIElement&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Border.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:TappedBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;behaviors:SetPropertyAction&lt;br /&gt;
                PropertyName=&amp;quot;IsOpen&amp;quot;&lt;br /&gt;
                TargetObject=&amp;quot;{Binding Source={x:Reference TooltipTextPopup}}&amp;quot;&lt;br /&gt;
                Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/behaviors:TappedBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;/Border.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- BEFORE WORKAROUND --&amp;gt;&lt;br /&gt;
&amp;lt;Border x:Name=&amp;quot;YourUIElement&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ToolTipProperties.Text&amp;gt;&lt;br /&gt;
         This will NOT be shown on iOS&lt;br /&gt;
    &amp;lt;/ToolTipProperties.Text&amp;gt;&lt;br /&gt;
&amp;lt;/Border&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Attention|The ''IsOpen'' property on the SfPopup only indicates whether the Popup is open or closed, but it does not replace ''IsVisible''. If there is any Visibility dependency related to other controls, make sure to also set the ''IsVisible'' property on the SfPopup accordingly to prevent possible issues.}}&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
= UBIK Go (Maui) Customizing Guide {{Version/MobileSince|5.1}} =&lt;br /&gt;
The change to Maui was taken as an opportunity both to visually update the client's default UI, and to add some quality of life changes aiming to reduce the amount of customizing needed.&lt;br /&gt;
&lt;br /&gt;
This section describes the standard UI and how to more easily customize it.&lt;br /&gt;
&lt;br /&gt;
For differences between Xamarin and Maui, please refer to the [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] article.&lt;br /&gt;
&lt;br /&gt;
== XAML Changes And Improvements ==&lt;br /&gt;
=== Styles and Resources ===&lt;br /&gt;
* Various color elements were renamed for neutrality. This will help clarify the purpose of color themes, and make it easier to keep track of in customizings. The old versions are still available but moved to the Obsolete section of UBIKThemes. &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKDarkTextColor --&amp;gt; UBIKRegularTextColor&lt;br /&gt;
UBIKDarkThemeColor --&amp;gt; UBIKMainThemeColor&lt;br /&gt;
UBIKLightTextColor --&amp;gt; UBIKMainThemeContrastColor&lt;br /&gt;
UBIKLightThemeColor --&amp;gt; UBIKBasePageColor&lt;br /&gt;
UBIKSubtleTextColor --&amp;gt; UBIKMediumTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Furthermore, effort was made to create 'contrast pairs' throughout the client; for example, UBIKMainThemeContrastColor is defined primarily for texts layered on elements of UBIKMainThemeColor (such as the title bar and text). &lt;br /&gt;
** The intention here is that this pair can be safely customized with no surprises, that cannot be guaranteed when using non-paired resource. For example, UBIKMainThemeContrastColor  and UBIKBasePageColor are both white in the default customizing, but if UBIKBasePageColor that were to be layered over UBIKMainThemeColor, it would result in a black-on-black issue in a dark theme customizing. &lt;br /&gt;
** The 'pairs' are; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKMainThemeColor x UBIKMainThemeContrastColor&lt;br /&gt;
UBIKBasePageColor x UBIKRegularTextColor&lt;br /&gt;
UBIKButtonColor x UBIKButtonTextColor &lt;br /&gt;
UBIKButtonToggledColor x UBIKButtonToggledTextColor &lt;br /&gt;
UBIKPDFBaseColor x UBIKPDFTextColor&lt;br /&gt;
UBIKPDFSelectedToolColor x UBIKPDFSelectedToolTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* An effort was also made to avoid hardcoding numeric values on the client. Reusable resources were introduced instead; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonIconSize&amp;quot;&amp;gt;20&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonPanelSize&amp;quot;&amp;gt;56&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonSize&amp;quot;&amp;gt;44&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKListItemSize&amp;quot;&amp;gt;80&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKTileItemSize&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;120&amp;quot; Phone=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKCaptionTextSize&amp;quot;&amp;gt;14&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKBodyTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKTitleTextSize&amp;quot;&amp;gt;18&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKProgressBarHeight&amp;quot;&amp;gt;4&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptivePadding&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;8,0&amp;quot; Phone=&amp;quot;4,0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptiveSpacing&amp;quot; x:TypeArguments=&amp;quot;x:Double&amp;quot; Default=&amp;quot;16&amp;quot; Phone=&amp;quot;8&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regarding corporate colors, there are now additional resources to customize, aside from UBIKAccentColor;&lt;br /&gt;
** UBIKHighlightColor is a secondary accent color used for highlighting (eg. Multiselect mode or edited Property). {{Version/MobileSince|5.1.0.0}} Transparency has been added to the UBIKHighlightColor.&lt;br /&gt;
** UBIKGradientColor {{Version/MobileSince|5.1.0.0}} is used in combination with UBIKAccentColor to form a gradient on the Authentication area.&lt;br /&gt;
* As in WinX {{Version/WinXSince|4.0}}, the various possible object status indicators were exported to a template called '''StatusIndicators''' located in UBIKThemes. These are now displayed at the top right of the item template, with a semi-opaque underlay in case the indicators appear over Title/SubTitle text.&lt;br /&gt;
* '''SfTextInputLayout''' was introduced and is used in various locations (Authentication, and properties).&lt;br /&gt;
* Default values for size, font, color, etc, were applied to various controls (Picker, Entry etc) for consistency.&lt;br /&gt;
* New '''SfListView''' styles were introduced and the originals moved to the Obsolete section.&lt;br /&gt;
** The listview now has a background color (UBIKMediumElementColor) and child item templates are now responsible for providing their own background color (UBIKBasePageColor that is applied to the Grid style UBIKItemBase). &lt;br /&gt;
*** The intention is to provide visual distinction from actual list items and empty list 'space'.&lt;br /&gt;
*** However, this will interfere with lists that rely on the SelectionBackground to highlight selection. This is solved in various ways throughout the UI, such as the SelectedIndicator used in UBIKChildItem, or the seperate SelectedItem and SelectedItemTemplate templates used in UBIKEditGuid.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Adaptivity ===&lt;br /&gt;
- tbd.&lt;br /&gt;
&lt;br /&gt;
=== Layout and Functionality ===&lt;br /&gt;
* '''UBIKNavigationBar''' was introduced as a templatable alternative to the hardcoded context menu (accessed by the '...' button in the top right of the content area) and is fully customizable.&lt;br /&gt;
* Shadowed panels were introduced in place of floating buttons in the content tabs (Children, Properties). For consistency, both are located at the top of their respective tab content.&lt;br /&gt;
* '''UBIKChildItem''' was visually simplified. It now displays a simple icon, the Title (and MRO progress, if any) and Subtitle, and StatusIndicators in the top right. The progressbar is now displayed across the bottom of the item.&lt;br /&gt;
* '''UBIKTaskItem''' was completely redesigned. &lt;br /&gt;
** Aside from the StatusIndicators that appear in the top right uniformly on any context object, MRO-related ones (Task status (Finished, NA, or Not Necessary, Group Limit and Size, Previous Value, and Tech Indicator) appear on the top left contained in an SfChipGroup. &lt;br /&gt;
** The main area of the task item is previously split between Title and task-related input. On smaller devices or in editing regardless of screen size, the input area sizes becomes larger.&lt;br /&gt;
** The task related input now looks visually distinct with and without a value. UBIKButton(Text)Color is used for 'new' tasks, while UBIKButtonToggled(Text)Color is used for the 'value filled' state.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
* '''UBIKRootItem''' (formerly UBIKMainItem) was introduced simply so that the Title, Area, and Item are organized together within the default and customizing folders. For compatibility, UBIKMainItem still exists in the default folder, however, be aware that the listview in UBIKRootArea now requests UBIKRootItem as the ItemTemplate by default.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Customizing Guides ==&lt;br /&gt;
=== Dark Theme ===&lt;br /&gt;
While UBIK Go does not include a Dark Theme by default, a lot of effort was invested in optimizing the color resources used throughout the app, so that a dark theme can be quickly customized. Furthermore, below is a list of recommended changes that result in a functional dark theme.&lt;br /&gt;
&lt;br /&gt;
'''In UBIKThemes:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;x:String x:Key=&amp;quot;TextFontFamily&amp;quot;&amp;gt;InterL&amp;lt;/x:String&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the value for TextFontFamily with &amp;quot;InterL&amp;quot;; It is recommended to use a thinner font as white on black looks bolder than the inverse.&lt;br /&gt;
A 'Light' version of the default font font was added and can be accessed using the tag InterL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKRegularTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMediumTextColor&amp;quot;&amp;gt;#A3ffffff&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBasePageColor&amp;quot;&amp;gt;#3a3a3c&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMainThemeColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBorderColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKElementColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKLightElementColor&amp;quot;&amp;gt;#222124&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKFinishedElementColor&amp;quot;&amp;gt;#2a2a2b&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKOverlayElementColor&amp;quot;&amp;gt;#3D000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKImageOverlayColor&amp;quot;&amp;gt;#A3000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt; &lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledTextColor&amp;quot;&amp;gt;Black&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolTextColor&amp;quot;&amp;gt;#292929&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFBaseColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the above color resources (or similar).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Shadow&lt;br /&gt;
        x:Key=&amp;quot;UBIKPanelShadow&amp;quot;&lt;br /&gt;
        Brush=&amp;quot;Black&amp;quot; ... /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change the value for the attribute Brush to &amp;quot;Black&amp;quot; to darken the panel shadows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;&amp;gt;#636365&amp;lt;/Color&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;UBIKProgressBar&amp;quot; TargetType=&amp;quot;controls:ProgressBar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;StatusColor&amp;quot; Value=&amp;quot;{Binding ClassificationHandler.StatusColor, Converter={StaticResource IntToColor}, ConverterParameter={StaticResource UBIKProgressBarUndefinedStatuscolor}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The light theme uses UBIKElementColor for the progress bar color when none is defined on the server. However, this does not invert well in a dark theme. Therefore a new color resource should be introduced (&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;) and used in the ConverterParameter of the IntToColor converter, which does not accept a color hex code directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''In UBIKSplashArea:'''&lt;br /&gt;
&lt;br /&gt;
Follow the instructions embedded within the file to replace the splash image with a custom logo. Alternatively, simply adapt the Source attribute of the Image control to &amp;quot;splashlogoinverse.png&amp;quot; to apply an inversion of the UBIK Go logo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Increased FontSize ===&lt;br /&gt;
tbd.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29803</id>
		<title>MRO Objects (Client)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29803"/>
				<updated>2026-05-06T11:57:29Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:MRO_WinX.png|thumb|alt=MRO Child List UI (WinX)|MRO UI (WinX)]]&lt;br /&gt;
[[File:MRO_MAUI1.jpeg|thumb|alt=MRO Child List UI (Android)|MRO UI (Android)]]&lt;br /&gt;
The WinX client UI displays MRO configured objects like any other root- or child-object enriched by some additional logic and features.&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
The representation of MRO features comprises some indicators and interactive controls. In the {{UBIK}} child list, the main object displays cumulated technical and organisational status as well as the overall work progress based on the underlying data branch. Objects classified as MRO objects in general provide indicators for the MRO status. This means the status is shown next to the main icon of a child-/details-/documents-page as well as next to the icons of the child list items:&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on all objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. If e.g. a inventory object is reported as damaged, its parent objects will all display the exclamation mark symbol to indicate that a problem was reported in the child items.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (Winx &amp;amp; Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
The organisational status indicates the amount of confirmed work within the data branch, including already confirmed work packages as well as tasks that are locked by their owning work package. The organisational status indicator is displayed on all objects that represent an organisational state or receive the organisational status from subsequent objects in the underlying data branch, and visualizes the amount of confirmed work performed within that branch.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UI_WinX_MRO_OrganisationalStatusIndicator.png|Organisational Status Indicator (WinX)&lt;br /&gt;
File:ConfirmedWP_WinX.png|MRO Workpackage Confirmed (Flag) Indicator (WinX)&lt;br /&gt;
File:Android_orga_status.PNG|Organisational Status Indicator (Android)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|MRO Workpackage Confirmed Indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
The work progress is calculated from the current work progress and from the progress cumulated from subsequent objects in the underlying data branch. This indicator shows the amount of work done in the data branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, the progress is displayed with maximum one decimal place. For example, 99.75% is displayed as 99.8%. The format string used to achieve this is &amp;lt;code&amp;gt;{0:0.#}%&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If other numeric formats are preferred in your usecases, you can refer to [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings] for more information. The template to customize for this is the UBIKMROProgressBadge within UBIKThemes.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|MRO Workpackage confirm button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|MRO Workpackage revoke confirmation button (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|MRO Workpackage confirm button (Android)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|MRO Workpackage revoke confirmation button (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
On both clients, a Task can be reverted by clicking twice on the Not Applicable button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Therefore, clicking the value on the shown task opens an editor to enter the desired value. If no value was entered before, an empty line will be shown. Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). An additional small value indicator below the main value can report e.g. the previously entered value. The behaviour of this previous value indicator has to be specified separately in the customizing.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Measurment Task Empty UWP.png|Measurement Task without a reported value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a reported value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a reported value (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
There is also an [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] available for progress tasks.{{Version/WinXSince|2.5.4}}&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Progress Task UWP.png|Progress Task with a reported work progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with a reported work progress and a previous progress(Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Unfinished MRO CheckTask (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable MRO CheckTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Finished Inspection Task UWP.png|Finished MRO InspectionTask (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished MRO InspectionTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|sequential task classification]] allows you to pre-define a sequence in which tasks are to be resolved by users. This means that it is required for one or multiple tasks to be finished in order for other tasks to become &amp;quot;unlocked&amp;quot; and editable. A task can have any number of &amp;quot;predecessors&amp;quot;. Predecessors are the tasks that are required to be finished first.&lt;br /&gt;
&lt;br /&gt;
A task can have predecessors that live anywhere else in the object hierarchy. It is not necessary for a task and its predecessors to be part of the same work package, even though this is likely the most common use case.&lt;br /&gt;
&lt;br /&gt;
The state of a sequential task is evaluated both offline and online to get the best possible user experience. The user will see dependent tasks update immediately if their successors were finished, if those tasks are currently visible in the UI. There is 1 case in which the server-side state will override the client-side (offline) evaluation, discussed below.&lt;br /&gt;
The state of each sequential task is evaluated the following way:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says the task is open, we consider this as the truthful state and don't do any other evaluation.&lt;br /&gt;
# Check if the task has any predecessors.&lt;br /&gt;
# Try to load each predecessor task.&lt;br /&gt;
#* If loading of any predecessor fails (the object is not available offline), the task will be locked.&lt;br /&gt;
# If all predecessor tasks are finished, the task is open and can be edited. Otherwise, the task is locked.&lt;br /&gt;
&lt;br /&gt;
The customizer setting up the task dependency relations needs to ensure that the dependencies are not cyclical. In this case, it would be impossible for any tasks in the &amp;quot;cycle&amp;quot; to be finished.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
As a demonstration of this feature, see [[Media:Sequential_tasks_winx.mp4|this video]]. The relations between tasks are defined as in [[Media:Task_relations.png|this image]], starting at A1 and A2, which are not dependent on any other tasks. The lines (from left to right) indicate dependencies. This means that B2 has tasks A1 and A2 as its predecessors, for example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
Sometimes, not all tasks have to be finished. More specifically, there might be a predefined condition where you only need to finish a certain number of tasks among a group of them. These are known in {{UBIK}} as [[MROCLS_GROUPEDTASK|grouped tasks]].&lt;br /&gt;
&lt;br /&gt;
The idea is, a group of tasks can be defined as siblings to each other and they also share the same server configured threshold. When the number of finished tasks among that group exceeds the threshold, the entire group is considered as no longer necessary. When reflected in the overall status of the task owner(s), these tasks would appear as if they are finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, the finished status is completely independent from the not necessary status on a task. A grouped task which is no longer necessary can be both finished or not yet finished. In other words, users don't have to finish a not necessary grouped task, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation for grouped tasks and their task owners requires the knowledge of all siblings tasks. Imagine 2 out of 3 tasks must be finished but the client only knows 1 in total and the others are only available at the server at that time. This makes it impossible to draw conclusions whether the task(s) should be necessary or not. Under such circumstances, the local status calculation is done as if these are just regular tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|Like with the other MRO objects, the client always chooses the best available statuses for grouped tasks to present to the users. More specifically, it uses the statuses calculated by the server when the client is not offline and there are no uncommitted local changes on the involved objects. Otherwise, it uses the statuses calculated locally to the best of its knowledge.}}&lt;br /&gt;
&lt;br /&gt;
A task can also be a grouped and a sequential one at the same time. In such a case, the grouped nature of the sibling tasks will affect the way the task sequence completes.&lt;br /&gt;
&lt;br /&gt;
For example, task A1, A2 and A3 are 3 grouped sibling tasks and only 1 of them needs to be finished. At the same time, they are all predecessors of task B. Normally, all predecessors must be finished (and locked) before task B becomes the next one in the sequence and therefore unlocked. In this case, however, as soon as one of the predecessors is finished, all three become unnecessary (and locked) and task B unlocks as a result of that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Supervisor Task {{Version/XamarinSince|4.8}} ====&lt;br /&gt;
As the name suggests, supervisor tasks are those that must be finished under supervision. When users want to finish a [[MROCLS_MRO_SUPERVISOR_TASK|supervisor task]], they must hand over their work devices to a supervisor. The latter checks the work status and scans an NFC tag if the work is approved. If the [[MROCLS_MRO_SUPERVISOR|supervisor]] has sufficient permissions for the task and the correct supervisor PIN is given, the task gets unlocked and the users can proceed to finish it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300px heights=300px&amp;gt;&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Before_Verification.jpg|Supervisor Task Before Verification/Unlocking (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor Task Enter PIN (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Task After Verification/Unlocking (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A thing to note is that while the need to verify a supervisor task can be seen as a type of locking, it's certainly not the only reason for a [[Locked_Objects|locked object]]. This means a supervisor task can remain locked (although for different reasons) even after a supervisor has successfully verified it. This can often be the case if you use it in combination with other features such as [[MRO_Objects_(Client)#Sequential_Task|sequential tasks]], [[User_Rights|user rights]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For security reasons, the verification process is cancelled if the supervisor enters the wrong PIN for three times. Scanning the tag again is required in that case.}}&lt;br /&gt;
{{Hint|A setting controls [[RFID_tags#Choose_which_information_to_use_from_a_tag|which information in a scanned tag is used]] during this process.}}&lt;br /&gt;
&lt;br /&gt;
==== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
The Signature Task is a task type that is completed by capturing a handwritten signature from the user. The task contains an editor field that serves as the entry point for the signing process. When the user clicks (or taps) on the editor field, a signature dialog opens. Within this dialog, the user can provide their signature. After confirming the input, the signature is saved and the task is automatically marked as completed.&lt;br /&gt;
&lt;br /&gt;
If the task is signed while the client is online:&lt;br /&gt;
* The User (signee) is resolved immediately by the server and displayed.&lt;br /&gt;
* The ValidationTimestamp is generated and displayed.&lt;br /&gt;
* Both values are shown directly in the editor field after signing.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The User only gets resolved by the server and displayed once you're in online mode}}&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
If the displayed User and/or ValidationTimestamp cannot be fully shown due to limited space in the editor field, the complete information can be accessed via a Popup.&lt;br /&gt;
To show the Popup displaying the full User and ValidationTimestamp without truncation, click on the editor field.&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;br /&gt;
&lt;br /&gt;
==== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICTURE_TASK|picture task]] is a check task which can only be finished when it has at least one child document containing a valid file. In the UI, an additional photo button is presented next to the check so users can easily take photos before finishing the tasks.&lt;br /&gt;
* As any other objects, picture tasks can carry and display [[SYSCLS_CHILDINFOOWNER|child count information]]. But that is not a mandatory part of the feature. Even when it's not configured and not visible in the UI, you can still finish the tasks.&lt;br /&gt;
* In WinX/UWP, the UI also presents an expander which allows you to display the child documents of picture tasks. This is not present by default in the Mobile app due to the screen size limit but [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|can be easily customized]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|The task is named as such because pictures are the most commonly used types, but the child documents can be of other types as well. }}&lt;br /&gt;
&lt;br /&gt;
When a user tries to finish a picture task by tapping the check, the app might perform some data synchronization first if in online mode, which includes&lt;br /&gt;
* Syncing the child objects (including documents) of the task.&lt;br /&gt;
* Downloading the file(s) of the child documents.&lt;br /&gt;
During data synchronization, the check button on that task turns into a wait indicator. Afterwards, the app checks if the prerequisites to finish the task are met.&lt;br /&gt;
* If there are no child documents or no local files for the child documents, the task remains unfinished and the user gets informed about the reasons.&lt;br /&gt;
* Otherwise, the task gets finished and the photo button gets disabled.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Setting NA (not applicable) on a picture task is always possible, regardless of the condition of child documents.}}&lt;br /&gt;
&lt;br /&gt;
==== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_NUMERIC_TASK|numeric task]] is a task which records a double value (e.g. from a temperature sensor). Entering the value (including Not Applicable) completes the task.&lt;br /&gt;
* The value is compared against an accaptable value range which is not editable on the client.&lt;br /&gt;
* Deviation from this range results in visual feedback as well as the [[#Tech Status|tech status]] being set to display an issue.&lt;br /&gt;
* If the configured value range is invalid (e.g. min &amp;gt; max) and the user enters a value, the [[#Tech Status|tech status]] will also be set to display an issue.&lt;br /&gt;
* A numeric task also has a special value unit that can be set per task instance. If set, it overrides the standard value unit defined on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
==== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICK_LIST_TASK|Pick List task]] looks and behaves the same like a standard Integer Task with SelectiveList. Other than the standard Integer Task, the Pick List Task has an [[UBIK_Active_Lists|Active List]] defined on instance level to pick from for its value property. The task counts as finished as soon as a list item has been selected, or when pressing ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MRO objects with project information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Info (WinX)]]&lt;br /&gt;
An MRO object (except tasks) might also bring along [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information together with the MRO progress are displayed in a bar chart. The start &amp;amp; end dates of the MRO object are displayed on the progress bar. The length and the position of the progress bar, together with the current date mark indicate the timeline.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
When an (MRO) object is locked, editing it becomes impossible. More details about [[Locked_Objects|locked objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MROCLS_PROJECT]]&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]]&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]]&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]]&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29778</id>
		<title>Mobile XAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29778"/>
				<updated>2026-04-28T14:05:18Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Styles and Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The User Interface of the Mobile Clients (Android, iOS, Windows) can be fundamentally customized using custom XAML definitions. This customization process is heavily influenced by the [[XAML|XAML Customization Process on the WinX Client]].&lt;br /&gt;
&lt;br /&gt;
= Basics =&lt;br /&gt;
There are predefined XAML templates available that can be customized. If no customizing is found, the default templates will be used.&lt;br /&gt;
&lt;br /&gt;
== Default XAMLs ==&lt;br /&gt;
All default XAML templates that can be customized are available through the Mobile Windows client. You need to go to the app settings and click the &amp;quot;Unpack default XAMLs&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== Differences to WinX/UWP ==&lt;br /&gt;
* Since it's based on the Mobile XAML dialect, you CANNOT use any existing XAML customizings for the WinX/UWP app;&lt;br /&gt;
* Namespace definitions must include the corresponding assembly names;&lt;br /&gt;
* XAML template files have the extension name of '''xamlx''' instead of '''xaml''';&lt;br /&gt;
* You can deploy only those resources that you want to customize. (This is also the case for newer versions of WinX/UWP. {{Version/WinXSince|3.6}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overriding default XAMLs=&lt;br /&gt;
On Windows (WinX/UWP), the &amp;lt;code&amp;gt;[App Package Folder]/LocalState/xaml/&amp;lt;/code&amp;gt; folder can be accessed by the user and the customized XAML files directly added. An alternative to this on all platforms (including Android, iOS, etc.) is to use the ''Import Customizing'' button in the app settings to import the templates, styles, images, etc. (file by file, or all files within a zip package). The changes should be reflected in the UI (except the current page) without restarting the app. After directly editing the customizings (Mobile Windows), you can also use the &amp;quot;Reload customizing&amp;quot; button without restarting the app.&lt;br /&gt;
&lt;br /&gt;
In the following, we're going to override the default light theme color of the app:&lt;br /&gt;
* Unpack the default XAMLs;&lt;br /&gt;
* Pick and deploy the default UBIKThemes.xamlx to the '''xaml''' folder inside the ''LocalState'' folder;&lt;br /&gt;
* Open it with the text editor of your choice and remove everything within the '''ResouceDictionary''' except &amp;lt;code&amp;gt;&amp;lt;Color x:Key=&amp;quot;UBIKLightThemeColor&amp;quot;&amp;gt;blue&amp;lt;/Color&amp;gt;&amp;lt;/code&amp;gt;;&lt;br /&gt;
* Save the changes and reload. You should see changes successfully implemented.&lt;br /&gt;
&lt;br /&gt;
{{Attention| For maintainability reasons, it's HIGHLY recommended to deploy only those XAML resources you want to override. For example, if you only want to customize the UBIKChildArea, don't deploy others like the UBIKMenuArea. If you only want to customize the UBIKChildItem, that's the only content you should include in the UBIKThemes.}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Templates ==&lt;br /&gt;
Custom templates can be added, just like on the WinX/UWP client. Make sure to include all '''namespace definitions''' (as attributes of the '''ContentView''' tag), otherwise the custom template will not load.&lt;br /&gt;
&lt;br /&gt;
Similar to the ''UBIKThemes.xamlx'' file, custom or overridden templates start with a &amp;lt;code&amp;gt;&amp;lt;ContentView&amp;gt;&amp;lt;/code&amp;gt; tag containing all '''namespaces'''. &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; takes a '''ResourceDictionary''' and contains resources like references to converters. Finally, &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; contains the actual layout content (it's best to start with a '''Grid'''). Again, don't forget to add namespaces that you need!&lt;br /&gt;
&lt;br /&gt;
Templates can also be defined in ''UBIKThemes.xamlx''. In this case, they need to be added into the &amp;lt;code&amp;gt;&amp;lt;ResourceDictionary&amp;gt;&amp;lt;/code&amp;gt; inside the &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; template as a &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt;. Similarly, if you want to split up the templates into seperate files, you need to make sure to follow the steps mentioned above and get the content of the &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt; into the &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
{{Attention|Templates defined in separate files will override templates defined in the ''UBIKThemes.xamlx''!}}&lt;br /&gt;
&lt;br /&gt;
=== Bindings in resources ===&lt;br /&gt;
When using bindings such as [[Xamarin_XAML#Content_filtering|this]] in a resource located in a custom template, it is necessary to place the template in a UBIKContentView.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, this is because bindable objects in the ResourceDictionary of a ContentView (the custom template) don't automatically inherit the BindingContext from the container/parent view. UBIKContentView is created to additionally do that.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- UBIKCustomView.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt... ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Container where UBIKCustomView is placed, e.g. UBIKChildArea.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;controls:UBIKContentView Content=&amp;quot;{Binding [UBIKCustomView], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding Images ==&lt;br /&gt;
Images can't be loaded with the default '''Image''' tag, as the image is on different paths on each operating system.&lt;br /&gt;
&lt;br /&gt;
Therefore, there's a custom '''FileImage''' that internally overrides the default ''Image'' with two custom parameters:&lt;br /&gt;
* '''FolderName''' ...The name of the '''folder''' in the '''local folder'''. Only the first level inside the ''LocalState'' folder seems to work.&lt;br /&gt;
* '''FileName''' ...The name of the '''file''' in the said folder. &lt;br /&gt;
&lt;br /&gt;
Make sure to implement the proper namespace as well by adding&lt;br /&gt;
&amp;lt;code&amp;gt;xmlns:fimage=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; into the root item's attributes.&lt;br /&gt;
&lt;br /&gt;
Then, the image can be loaded using:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fimage:FileImage FileName=&amp;quot;image.png&amp;quot; FolderName=&amp;quot;xaml&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This snipped loads the image called '''image.png''' located in the '''xaml''' folder inside the ''LocalState''.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the ''FileImage'' tag doesn't seem to support most attributes. Therefore place it inside a '''Grid''' to achieve a perfect layout.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Icons ==&lt;br /&gt;
Moved to article [[XAML_Tips#Custom_Icons]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Converters==&lt;br /&gt;
:''Main Page: [[Converters_In_Mobile]]''&lt;br /&gt;
&lt;br /&gt;
They are used to convert specific data into some desired output, using custom logic. &lt;br /&gt;
&lt;br /&gt;
Consider the following example:&amp;lt;br/&amp;gt;&lt;br /&gt;
A label saying ''There are no children items available!'' should only be visible if the number of children-items is 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Advanced =&lt;br /&gt;
&lt;br /&gt;
== Feature related ==&lt;br /&gt;
&lt;br /&gt;
=== Customizing Menu Button {{Version/XamarinSince|4.6.0}} === &lt;br /&gt;
&lt;br /&gt;
For the Mobile Client, it is possible to show/hide the '''Menu button''' of the client.&amp;lt;br&amp;gt;&lt;br /&gt;
To customize the visibility of the '''Menu button''' you have to edit the default XAML '''Themes''' file.&lt;br /&gt;
&lt;br /&gt;
* Search for &amp;quot;'''ShowMenuToolBar'''&amp;quot; in the Themes file.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If there isn't any &amp;quot;'''ShowMenuToolBar'''&amp;quot; in your XAML Themes file, you just have to create one, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Boolean x:Key=&amp;quot;ShowMenuToolBar&amp;quot;&amp;gt;true&amp;lt;/x:Boolean&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the value to &amp;quot;true&amp;quot; to show the '''Menu button''' (default value).&lt;br /&gt;
* Set the value to &amp;quot;false&amp;quot; to hide the '''Menu button'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
File:menu_button_show.png|Menu Button shown&lt;br /&gt;
File:menu_button_hiddenV3.png|Menu Button hidden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Content filtering ===&lt;br /&gt;
For the Mobile clients, an &amp;quot;SfDataSourceExt&amp;quot; type is available for filtering list of items using defined expressions.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following example demonstrates how to filter for child items having certain property values. The filtered list and its count can be displayed in the UI.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&lt;br /&gt;
    ...&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;x:String x:Key=&amp;quot;Expresssion&amp;quot;&amp;gt;Item.Values[&amp;amp;quot;MP_YEAR&amp;amp;quot;].Contains(&amp;amp;quot;2019&amp;amp;quot;)&amp;lt;/x:String&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt  x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource Expresssion}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; Unloaded=&amp;quot;{Binding SkipFiltering}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;StackLayout Orientation=&amp;quot;Vertical&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Label Text=&amp;quot;{Binding DisplayItemsCount, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;controls:SfListViewExt ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/StackLayout&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notes on using bindings in ResourceDictionary ====&lt;br /&gt;
In the example shown above, you can see &amp;lt;code&amp;gt;{Binding Children.Items}&amp;lt;/code&amp;gt; is used. For this to work, the SfDataSourceExt control inside the ResourceDictionary must inherit the binding data context properly.&lt;br /&gt;
* In this case, that data context comes from where this template (UBIKChildArea.xamlx) is used, namely the UBIKContentArea.xamlx;&lt;br /&gt;
* When referencing this template in a ContentView control, the binding data context is '''NOT''' automatically inherited by the controls inside the ResourceDictioinary;&lt;br /&gt;
* That's why we use a UBIKContentView control instead. You can find its example usage in the default UBIKContentArea.xamlx template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Search ===&lt;br /&gt;
In the default UBIKMenuArea.xamlx (where the search UI is hosted), there are two commands associated with two events. See below.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SearchBar ...&amp;gt;&lt;br /&gt;
    &amp;lt;SearchBar.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior&lt;br /&gt;
            Command=&amp;quot;{Binding FreeTextSearchCommand}&amp;quot;&lt;br /&gt;
            CommandParameter=&amp;quot;{Binding Path=Text, Source={x:Reference SearchField}}&amp;quot;&lt;br /&gt;
            EventName=&amp;quot;SearchButtonPressed&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding DelayedFreeTextSearchCommand}&amp;quot; EventName=&amp;quot;TextChanged&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/SearchBar.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/SearchBar&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;SearchButtonPressed&amp;lt;/code&amp;gt; is responsible for executing searches after the user confirms the input (e.g. pressing {{{keypress|Enter}}} or the search button).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;TextChanged&amp;lt;/code&amp;gt; is responsible for the &amp;quot;search as you type&amp;quot; behavior. Namely it triggers an automatic search shortly (half second) after the user stops changing the text in the search bar. It can be turned off by simply removing that particular behavior.&lt;br /&gt;
&lt;br /&gt;
=== DisplayViewCommand ===&lt;br /&gt;
This command can be used to [[Custom_View_(Client)|display custom views]].&lt;br /&gt;
&lt;br /&gt;
=== Flashlight  {{Version/MobileSince|5.1.0}}  ===&lt;br /&gt;
For the Mobile clients, it is possible to control the system flashlight via customizing and switch it on or off.&lt;br /&gt;
&lt;br /&gt;
The available properties can, for example, be bound to a Switch or CheckBox, as demonstrated below. These properties allow you to:&lt;br /&gt;
* Determine whether the device supports flashlight functionality (IsFlashSupported)&lt;br /&gt;
* Check whether the flashlight is currently turned on or off (IsFlashEnabled)&lt;br /&gt;
* Toggle the flashlight on or off via user interaction (SwitchFlashLight) &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If an attempt is made to enable the flashlight on a device that does not provide flashlight support, no action is performed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Switch&lt;br /&gt;
! controls:CheckBox&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Switch IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
        IsToggled=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:CheckBox&lt;br /&gt;
    x:Name=&amp;quot;PropertyToggle&amp;quot;&lt;br /&gt;
    CheckSymbol=&amp;quot;&amp;amp;#x1F526;&amp;quot;&lt;br /&gt;
    IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
    IsChecked=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKIconToggleButton}&amp;quot;&lt;br /&gt;
    SymbolSize=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger&lt;br /&gt;
            Binding=&amp;quot;{Binding AppStatus.IsFlashEnabled}&amp;quot;&lt;br /&gt;
            TargetType=&amp;quot;controls:CheckBox&amp;quot;&lt;br /&gt;
            Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Background&amp;quot; Value=&amp;quot;{StaticResource UBIKAccentColor}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
   &amp;lt;/controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:CheckBox&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
To get a good performance in the app UI when using your Xaml customizings, it is recommended to try the following.&lt;br /&gt;
* Always keep your UI structure simple. Choose the most efficient layouts for the scenarios and avoid unnecessary UI elements. Please refer to [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#choose-the-correct-layout &amp;quot;choose the correct layout&amp;quot;] and [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#reduce-the-visual-tree-size &amp;quot;reduce the visual tree size&amp;quot;];&lt;br /&gt;
* Turn on [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-compression layout compression] on wrapping elements that don't have any visual parameters set (reasons stated in the linked documentation).&lt;br /&gt;
{{Hint|There is a default &amp;quot;HeadlessLayout&amp;quot; style available in the app you can use on elements such as Grids, StackLayouts, ContentViews, etc. It turns on [[Xamarin_XAML#Layout_compression_examples|layout compression]] on the applied elements in Xamarin.Android (since we find it not worth the effort in Xamarin.iOS).}}&lt;br /&gt;
{{Attention|If possible, one should always favor designing the UI with less wrapping elements over turning on layout compression on unnecessary ones.}}&lt;br /&gt;
&lt;br /&gt;
=== General performance tips ===&lt;br /&gt;
* Reduce number of views per page&lt;br /&gt;
* Don’t bind things if they could be set static easily&lt;br /&gt;
* If you do not change the default, don’t set it explicit. For example, [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.StackLayout.Orientation?view=xamarin-forms Orientation of StackLayout] is “Vertical” by default. No need to set it manually if you don’t want to change it.&lt;br /&gt;
* Transparency is expensive.&lt;br /&gt;
* Do not put ListViews into ScrollViews.&lt;br /&gt;
* To stack elements, create a grid and add them to the same cell one after another. It’s cheaper than RelativeLayout.&lt;br /&gt;
* Use Margins instead of Paddings.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
* Choose correct Layout, e.g. no need to add a StackLayout if it only has 1 child.&lt;br /&gt;
* [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-options LayoutOptions].Fill or .FillAndExpand are best choice in most cases. And they are already default, so no need to set.&lt;br /&gt;
* Autosize of rows and columns in grids should used as few as possible.&lt;br /&gt;
* RelativeLayout is very expensive. Try to avoid.&lt;br /&gt;
* In StackLayout, make sure there is only 1 LayoutOptions Expand.&lt;br /&gt;
&lt;br /&gt;
=== Labels ===&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/text/label#formatted-text FormattedText] instead of multiple labels.&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.linebreakmode?view=xamarin-forms Linebreakmode] NoWrap (which is already the default).&lt;br /&gt;
* Avoid [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Label.VerticalTextAlignment?view=xamarin-forms VerticalTextAlignment]. Anyway, if needed, use VerticalTextAligment instead of &lt;br /&gt;
VerticalOptions.&lt;br /&gt;
* Use the &amp;quot;TextTransform&amp;quot; attribute to convert the value of the &amp;quot;Text&amp;quot; attribute to either uppercase or lowercase.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label&lt;br /&gt;
      TextTransform=&amp;quot;Uppercase&amp;quot;&lt;br /&gt;
      Text=&amp;quot;{Binding Properties.AllItems[DESCR].DisplayValue}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Images ===&lt;br /&gt;
* Provide images in optimized width and size. Provide multiple resolutions for different usage.&lt;br /&gt;
* Set [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Image.IsOpaque?view=xamarin-forms IsOpaque] to true if image is opaque.&lt;br /&gt;
&lt;br /&gt;
=== Layout compression examples ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource ChangedSymbol}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The code above removes one wrapping element added automatically by the ContentView and demonstrates a good reason to use layout compression because it can not be avoided otherwise.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid Margin=&amp;quot;2&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Margin=&amp;quot;5&amp;quot; Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This example, on the other hand, demonstrates a bad usage of layout compression because it can be easily achieved by better designs such as using only the Label with a merged margin.&lt;br /&gt;
&lt;br /&gt;
Sometimes the content inside a compressed layout appears on a wrong z-index level. For eample:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;BoxView CornerRadius=&amp;quot;14&amp;quot; HeightRequest=&amp;quot;28&amp;quot; WidthRequest=&amp;quot;28&amp;quot; Color=&amp;quot;Red&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource Badge}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView &amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
According to the order of the BoxView and the Label, the latter should appear on top of the former (later ones have higher z-index levels). However, this can be disturbed by layout compression, causing the exact opposite.&lt;br /&gt;
In this case, you can add a &amp;lt;code&amp;gt;xmlns:android=&amp;quot;clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core&amp;quot;&amp;lt;/code&amp;gt; namespace to your Xaml file and manually elevate the Label by specifying &amp;lt;code&amp;gt;android:VisualElement.Elevation=&amp;quot;X&amp;quot;&amp;lt;/code&amp;gt; on it accordingly (X is the delta of the z-index level you want).&lt;br /&gt;
&lt;br /&gt;
=== SfListViewExt ===&lt;br /&gt;
For performance reasons, we created an extended version of the Syncfusion SfListView control and it should be used for all lists in customizings. You need to add a namespace like &amp;lt;code&amp;gt;xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; to your Xaml file and use it like &amp;lt;code&amp;gt;&amp;lt;controls:SfListViewExt ... /&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{Hint|Technically speaking, SfListViewExt informs item view models when their corresponding item views appear on / disappear from the screen. This way, view models can skip a lot of unnecessary work (on the UI) when their views are not visible. '''If SfListView is used instead, the item views will not reflect content changes until the page is reloaded/refreshed.'''}}&lt;br /&gt;
&lt;br /&gt;
It is possible to configure the ListView, that the ScrollPosition is remembered when navigating away from the page, to do so, the property RembemberScrollPosition needs to be set to true. If unset, the value defaults to false and the scroll positions are not remembered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt RememberScrollPosition=&amp;quot;True&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using multiple Lists on one page (e.g. in a TabbedView), it is necessary to set the AutomationId property uniquely for each list on the page, to support the remembering of the ScrollPosition.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delay and LazyLoading ===&lt;br /&gt;
{{Attention|Although both properties can be set in XAML on the two controls, this should not be done. When both the LazyLoading and Delay properties are set, the Delay property is ignored in the code-behind, as otherwise it could lead to unexpected behavior and, in the worst case, result in performance degradation.}}&lt;br /&gt;
&lt;br /&gt;
==== Delay in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
More complex UIs create a delay in rendering which leads to a feeling of &amp;quot;unresponsiveness&amp;quot; when navigating through the client. This is because the app loads and displays everything at once, leading to a larger delay between triggering navigation and completion of page loading.&lt;br /&gt;
 &lt;br /&gt;
While the complexity of the UI directly affects the time taken to render it, the experience of responsiveness can be somewhat improved by actually adding a delay between the loading of the content page, and actual data content (properties, children, etc). By not loading both at once, resources are freed up in the app, leading to a quicker loading of the basic page. The content then loads in at its normal speed.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Starting from version 5.1, a small delay was introduced in the content heavy pages (child page, document page and query page). However, additional delays can also be applied to the custom UI at will, using a new property added to two existing controls used to insert UI templates: UBIKContentView and ContentControl. You can specify a delay (in milliseconds) on both controls so that the content of them is loaded after that amount of time. Examples are shown below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:ContentControl &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    ContentTemplate=&amp;quot;{Binding [UBIKNavigationBar], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hint|The delay won't have any effect if you specify the Content of the UBIKContentView control instead of its Converter, because the Content is immediately laid out by the XAML framework that way. If you don't need a converter to determine the actual template name dynamically, you can still use the TemplateConverter and specify the template name like the following so that the delay applies.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay applies ✅&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; ConverterParameter=&amp;quot;UBIKChildArea&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay doesn't apply ❌&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Content=&amp;quot;{Binding [UBIKChildArea], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Lazy Loading in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
To further improve performance, it is now possible to apply LazyLoading to UBIKContentView and ContentControl. &lt;br /&gt;
&lt;br /&gt;
When a ContentTemplate is assigned to either of these controls and the LazyLoading property is set to true, the content is only loaded when it is explicitly requested. The difference between this and simply controlling the IsVisible condition is that in the latter, resources are still consumed in constructing the UI element, even though it is not shown. Note that Lazy loading requires a trigger to determine when the content should be loaded, and the biggest benefit is experienced when complex elements, especially those hosting a ListView or some kind of object/property collection, are lazy-loaded. &lt;br /&gt;
&lt;br /&gt;
UBIKTabView is optimized to make use of the LazyLoading attribute when it is applied to tab content. Additionally, usage outside of UBIKTabView is possible, as the loading can be triggered as a behavior attached to any other control, such as a button with an IsClicked behavior handler. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UBIKTabView with LazyLoading'''&lt;br /&gt;
&lt;br /&gt;
When used in combination with UBIKTabView (by including the LazyLoading=True attribute on any UBIKContentView or ContentControl content of a tab item, as is now standard {{Version/MobileSince|5.1}}), only the content of the selected tab is rendered (by default, the first tab). The content of non-selected tabs is not. When switching tabs, UBIKTabView takes care of triggering the rendering of the content for the newly selected tab. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView &lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; &lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKPropertyArea&amp;quot; &lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:ContentControl &lt;br /&gt;
            ContentTemplate=&amp;quot;{DynamicResource MyTemplate}&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Using another control as a trigger for lazy loading'''&lt;br /&gt;
&lt;br /&gt;
Other controls (e.g., Button, CheckBox, etc.) can also serve as triggers for lazy loading. The benefit of this is that LazyLoading can still be applied to a complex UBIKContentView or ContentControl that is not hosted within a UBIKTabView. &lt;br /&gt;
&lt;br /&gt;
And example of a usecase is a togglebutton that reveals a section of content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
    &amp;lt;Grid RowDefinitions=&amp;quot;*,50,*&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView x:Name=&amp;quot;ChildContainer&amp;quot; Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;Button&lt;br /&gt;
            x:Name=&amp;quot;LoadDocuments&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;1&amp;quot;&lt;br /&gt;
            HeightRequest=&amp;quot;50&amp;quot;&lt;br /&gt;
            HorizontalOptions=&amp;quot;Center&amp;quot;&lt;br /&gt;
            Text=&amp;quot;LazyLoadDocuments&amp;quot;&lt;br /&gt;
            WidthRequest=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;Clicked&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;behaviors:InvokeMethodAction MethodName=&amp;quot;TriggerLazyLoad&amp;quot; TargetObject=&amp;quot;{Binding Source={x:Reference DocumentsAreaLoader}}&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;/Button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;controls:UBIKContentView&lt;br /&gt;
            x:Name=&amp;quot;DocumentsAreaLoader&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;2&amp;quot;&lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot;&lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKDocumentArea&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Known issues =&lt;br /&gt;
&lt;br /&gt;
=== Headlesslayout style in custom UBIKThemes causing problems ===&lt;br /&gt;
&lt;br /&gt;
In our default '''UBIKThemes''', we are currently using this style for a headless layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;HeadlessLayout&amp;quot; TargetType=&amp;quot;Layout&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;CompressedLayout.IsHeadless&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Setter.Value&amp;gt;&lt;br /&gt;
            &amp;lt;OnPlatform&lt;br /&gt;
                x:TypeArguments=&amp;quot;x:Boolean&amp;quot;&lt;br /&gt;
                Android=&amp;quot;True&amp;quot;&lt;br /&gt;
                WinPhone=&amp;quot;False&amp;quot;&lt;br /&gt;
                iOS=&amp;quot;False&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Setter.Value&amp;gt;&lt;br /&gt;
    &amp;lt;/Setter&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
This style is used for better UI performance on Android.&lt;br /&gt;
Using this style in a '''custom UBIKThemes''' could cause an exception &amp;amp; an app crash, or some objects to disappear.&lt;br /&gt;
The best case would be to '''not''' include it in the custom themes file, as it's unnecessary if you don't want to make any changes here.&lt;br /&gt;
&lt;br /&gt;
'''This issue is only known on Android tablet devices.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataTrigger Issues ===&lt;br /&gt;
==== Conflicting Triggers ====&lt;br /&gt;
DataTriggers in Mobile function better than the equivalent DataTriggerBehavior in UWP as they automatically handle the opposite case when a Boolean attribute value is set. This means that if a boolean DataTrigger is set, such as IsVisible=True, the False visibility will automatically be set if the Binding/Value condition is not met.&lt;br /&gt;
&lt;br /&gt;
However, this means that stacking multiple DataTriggers on the same attribute can lead to unexpected results. For this reason, it is recommended to use as few DataTriggers as possible. &lt;br /&gt;
* Avoid setting the same attribute more than once; do not set the same value as a default attribute and in the DataTrigger (ControlTemplate in the below example).&lt;br /&gt;
* Ideally, use only DataTriggers without a default ControlTemplate. This ensures that content is created only after the trigger evaluation is complete. If a default ControlTemplate is set, it is always loaded immediately, even if another template is applied right after.&lt;br /&gt;
* It is acceptable, but not recommended, to combine a single DataTrigger with an opposite default value, but only if the default value is different from all values set in triggers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Don't Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Instead Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Acceptable, but not recommended&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== DataTrigger to set Footer Properties in a ListView ====&lt;br /&gt;
&lt;br /&gt;
When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases.&lt;br /&gt;
It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty.&lt;br /&gt;
&lt;br /&gt;
If you encounter such an issue, please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger.&lt;br /&gt;
Also, new customizings should consider this workaround as a preventive action.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK IN CERTAIN CASES --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Incorrect glyphs may be shown on buttons ===&lt;br /&gt;
&lt;br /&gt;
When using glyphs on buttons in Mobile, sometimes a different glyph than the expected one will show up when viewing the app on Android.&lt;br /&gt;
They only seem to appear incorrectly when used as the Text property of the button (with FontFamily set to UBIKSymbols, such as the UBIKIconButton style.)&lt;br /&gt;
&lt;br /&gt;
If you encounter this issue please workaround by supplying the icon through the FontImageSource property of the button.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding BulkOperation.InvokeOnItemsCommand}&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;Button.ImageSource&amp;gt;&lt;br /&gt;
          &amp;lt;FontImageSource &lt;br /&gt;
               FontFamily=&amp;quot;{DynamicResource UBIKSymbols}&amp;quot;&lt;br /&gt;
               Glyph=&amp;quot;{x:Static resources:UBIKIcons.MobileDelete}&amp;quot;&lt;br /&gt;
               Color=&amp;quot;{DynamicResource UBIKDarkThemeColor}&amp;quot;&lt;br /&gt;
               Size=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.ImageSource&amp;gt;&lt;br /&gt;
     &amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
          &amp;lt;classes:KeyValueList&amp;gt;&lt;br /&gt;
                    &amp;lt;classes:KeyValueParameter Key=&amp;quot;Command&amp;quot; Value=&amp;quot;DiscardContentCommand&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/classes:KeyValueList&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Buttons and gesture recognizers ===&lt;br /&gt;
In Mobile XAML, you can use gesture recognizers on many UI elements such as a Grid to enable the latter to interact with user inputs.&lt;br /&gt;
&lt;br /&gt;
However, we've already made quite a lot of experience that gesture recognizers do not always work on Android and iOS when used on a Button control.&lt;br /&gt;
For example, the following Button won't properly invoke the command on said platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK!!! --&amp;gt;&lt;br /&gt;
&amp;lt;Button ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.GestureRecognizers&amp;gt;&lt;br /&gt;
        &amp;lt;TapGestureRecognizer Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.GestureRecognizers&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Therefore, you should always seek alternatives for Buttons.&lt;br /&gt;
'''If only one command is needed''', use the standard Command property on the Button, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; .../&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Or if multiple commands are needed, use Behaviors '''instead''', e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS ALSO WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button xmlns:behaviors=&amp;quot;clr-namespace:UBIK.CPL.Behaviors;assembly=UBIK.CPL&amp;quot; ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding NavigateBackCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== No dynamic reloading of Document Viewer ===&lt;br /&gt;
[[File:PDFViewerFixWiki.JPG]]&lt;br /&gt;
&lt;br /&gt;
In a customizing that combines a single-selection list of documents with some kind of viewer (especially UBIKDocumentContentArea), it is generally the case that switching the document causes the document viewer to then appear blank. The technical reason is that the PDFViewer used in the UBIKDocumentContentArea is not reloaded once the document content is reloaded. &lt;br /&gt;
&lt;br /&gt;
An easy fix is to apply a DataTrigger that unloads the ContentView when the document content is null, as the ContentView is forced to rerender itself when the trigger condition is no longer met.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Document Viewer --&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    x:Name=&amp;quot;DoucmentViewer&amp;quot; &lt;br /&gt;
    BindingContext=&amp;quot;{Binding SelectedItem, Source={x:Reference DocumentList}}&amp;quot;&lt;br /&gt;
    Content=&amp;quot;{Binding [UBIKDocumentContentArea], Source={x:Static services:TemplateService.Instance}}&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger TargetType=&amp;quot;controls:UBIKContentView&amp;quot; Binding=&amp;quot;{Binding SelectedItem.DocumentViewModel.DocumentContent, Source={x:Reference DocumentList}, Converter={StaticResource NullToBool}}&amp;quot; Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Content&amp;quot; Value=&amp;quot;{x:Null}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Issues with SfPullToRefresh in Mobile client {{Version/MobileSince|5.0}} ===&lt;br /&gt;
Due to a third-party issue, problems may occur on Mobile Android when using the SfPullToRefresh control in combination with the SfListViewExt. This can result in e.g. navigation or task interaction sometimes requiring multiple clicks.&lt;br /&gt;
In general, and due to more issues, it's not recommended to use the SfPullToRefresh control.&lt;br /&gt;
In our Mobile standard client, the PullToRefresh control has been replaced by a Refresh button in the Context Menu.&lt;br /&gt;
If you still decide to use SfPullToRefresh, there are a few points to consider:&lt;br /&gt;
&lt;br /&gt;
==== Avoid multiple SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue that causes the app to freeze, avoid placing more than one SfPullToRefresh controls as siblings in a xaml hierarchy. If switching between contents in a SfPullToRefresh control is necessary use separate DataTemplates for the contents and use e.g. a DataTrigger to set one of them as the ControlTemplate of a ContentControl inside the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_multiple_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
==== Avoid using SyncFusion ListViews directly in SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue on some Android devices that can cause some items in a SfListViewExt to be rendered incorrectly or not at all after triggering a PullToRefresh, avoid placing a SfListViewExt directly in a SfPullToRefresh control. Instead, wrap the ListView in a DataTemplate and use it in a ContentControl as a child of the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_using_SyncFusion_ListViews_directly_in_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= UBIK Go (Maui) Customizing Guide {{Version/MobileSince|5.1}} =&lt;br /&gt;
The change to Maui was taken as an opportunity both to visually update the client's default UI, and to add some quality of life changes aiming to reduce the amount of customizing needed.&lt;br /&gt;
&lt;br /&gt;
This section describes the standard UI and how to more easily customize it.&lt;br /&gt;
&lt;br /&gt;
For differences between Xamarin and Maui, please refer to the [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] article.&lt;br /&gt;
&lt;br /&gt;
== XAML Changes And Improvements ==&lt;br /&gt;
=== Styles and Resources ===&lt;br /&gt;
* Various color elements were renamed for neutrality. This will help clarify the purpose of color themes, and make it easier to keep track of in customizings. The old versions are still available but moved to the Obsolete section of UBIKThemes. &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKDarkTextColor --&amp;gt; UBIKRegularTextColor&lt;br /&gt;
UBIKDarkThemeColor --&amp;gt; UBIKMainThemeColor&lt;br /&gt;
UBIKLightTextColor --&amp;gt; UBIKMainThemeContrastColor&lt;br /&gt;
UBIKLightThemeColor --&amp;gt; UBIKBasePageColor&lt;br /&gt;
UBIKSubtleTextColor --&amp;gt; UBIKMediumTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Furthermore, effort was made to create 'contrast pairs' throughout the client; for example, UBIKMainThemeContrastColor is defined primarily for texts layered on elements of UBIKMainThemeColor (such as the title bar and text). &lt;br /&gt;
** The intention here is that this pair can be safely customized with no surprises, that cannot be guaranteed when using non-paired resource. For example, UBIKMainThemeContrastColor  and UBIKBasePageColor are both white in the default customizing, but if UBIKBasePageColor that were to be layered over UBIKMainThemeColor, it would result in a black-on-black issue in a dark theme customizing. &lt;br /&gt;
** The 'pairs' are; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKMainThemeColor x UBIKMainThemeContrastColor&lt;br /&gt;
UBIKBasePageColor x UBIKRegularTextColor&lt;br /&gt;
UBIKButtonColor x UBIKButtonTextColor &lt;br /&gt;
UBIKButtonToggledColor x UBIKButtonToggledTextColor &lt;br /&gt;
UBIKPDFBaseColor x UBIKPDFTextColor&lt;br /&gt;
UBIKPDFSelectedToolColor x UBIKPDFSelectedToolTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* An effort was also made to avoid hardcoding numeric values on the client. Reusable resources were introduced instead; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonIconSize&amp;quot;&amp;gt;20&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonPanelSize&amp;quot;&amp;gt;56&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonSize&amp;quot;&amp;gt;44&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKListItemSize&amp;quot;&amp;gt;80&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKTileItemSize&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;120&amp;quot; Phone=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKCaptionTextSize&amp;quot;&amp;gt;14&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKBodyTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKTitleTextSize&amp;quot;&amp;gt;18&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKProgressBarHeight&amp;quot;&amp;gt;4&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptivePadding&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;8,0&amp;quot; Phone=&amp;quot;4,0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptiveSpacing&amp;quot; x:TypeArguments=&amp;quot;x:Double&amp;quot; Default=&amp;quot;16&amp;quot; Phone=&amp;quot;8&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Regarding corporate colors, there are now additional resources to customize, aside from UBIKAccentColor;&lt;br /&gt;
** UBIKHighlightColor is a secondary accent color used for highlighting (eg. Multiselect mode or edited Property). {{Version/MobileSince|5.1.0.0}} Transparency has been added to the UBIKHighlightColor.&lt;br /&gt;
** UBIKGradientColor {{Version/MobileSince|5.1.0.0}} is used in combination with UBIKAccentColor to form a gradient on the Authentication area.&lt;br /&gt;
* As in WinX {{Version/WinXSince|4.0}}, the various possible object status indicators were exported to a template called '''StatusIndicators''' located in UBIKThemes. These are now displayed at the top right of the item template, with a semi-opaque underlay in case the indicators appear over Title/SubTitle text.&lt;br /&gt;
* '''SfTextInputLayout''' was introduced and is used in various locations (Authentication, and properties).&lt;br /&gt;
* Default values for size, font, color, etc, were applied to various controls (Picker, Entry etc) for consistency.&lt;br /&gt;
* New '''SfListView''' styles were introduced and the originals moved to the Obsolete section.&lt;br /&gt;
** The listview now has a background color (UBIKMediumElementColor) and child item templates are now responsible for providing their own background color (UBIKBasePageColor that is applied to the Grid style UBIKItemBase). &lt;br /&gt;
*** The intention is to provide visual distinction from actual list items and empty list 'space'.&lt;br /&gt;
*** However, this will interfere with lists that rely on the SelectionBackground to highlight selection. This is solved in various ways throughout the UI, such as the SelectedIndicator used in UBIKChildItem, or the seperate SelectedItem and SelectedItemTemplate templates used in UBIKEditGuid.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Adaptivity ===&lt;br /&gt;
- tbd.&lt;br /&gt;
&lt;br /&gt;
=== Layout and Functionality ===&lt;br /&gt;
* '''UBIKNavigationBar''' was introduced as a templatable alternative to the hardcoded context menu (accessed by the '...' button in the top right of the content area) and is fully customizable.&lt;br /&gt;
* Shadowed panels were introduced in place of floating buttons in the content tabs (Children, Properties). For consistency, both are located at the top of their respective tab content.&lt;br /&gt;
* '''UBIKChildItem''' was visually simplified. It now displays a simple icon, the Title (and MRO progress, if any) and Subtitle, and StatusIndicators in the top right. The progressbar is now displayed across the bottom of the item.&lt;br /&gt;
* '''UBIKTaskItem''' was completely redesigned. &lt;br /&gt;
** Aside from the StatusIndicators that appear in the top right uniformly on any context object, MRO-related ones (Task status (Finished, NA, or Not Necessary, Group Limit and Size, Previous Value, and Tech Indicator) appear on the top left contained in an SfChipGroup. &lt;br /&gt;
** The main area of the task item is previously split between Title and task-related input. On smaller devices or in editing regardless of screen size, the input area sizes becomes larger.&lt;br /&gt;
** The task related input now looks visually distinct with and without a value. UBIKButton(Text)Color is used for 'new' tasks, while UBIKButtonToggled(Text)Color is used for the 'value filled' state.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
* '''UBIKRootItem''' (formerly UBIKMainItem) was introduced simply so that the Title, Area, and Item are organized together within the default and customizing folders. For compatibility, UBIKMainItem still exists in the default folder, however, be aware that the listview in UBIKRootArea now requests UBIKRootItem as the ItemTemplate by default.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Customizing Guides ==&lt;br /&gt;
=== Dark Theme ===&lt;br /&gt;
While UBIK Go does not include a Dark Theme by default, a lot of effort was invested in optimizing the color resources used throughout the app, so that a dark theme can be quickly customized. Furthermore, below is a list of recommended changes that result in a functional dark theme.&lt;br /&gt;
&lt;br /&gt;
'''In UBIKThemes:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;x:String x:Key=&amp;quot;TextFontFamily&amp;quot;&amp;gt;InterL&amp;lt;/x:String&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the value for TextFontFamily with &amp;quot;InterL&amp;quot;; It is recommended to use a thinner font as white on black looks bolder than the inverse.&lt;br /&gt;
A 'Light' version of the default font font was added and can be accessed using the tag InterL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKRegularTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMediumTextColor&amp;quot;&amp;gt;#A3ffffff&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBasePageColor&amp;quot;&amp;gt;#3a3a3c&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMainThemeColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBorderColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKElementColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKLightElementColor&amp;quot;&amp;gt;#222124&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKFinishedElementColor&amp;quot;&amp;gt;#2a2a2b&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKOverlayElementColor&amp;quot;&amp;gt;#3D000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKImageOverlayColor&amp;quot;&amp;gt;#A3000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt; &lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledTextColor&amp;quot;&amp;gt;Black&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolTextColor&amp;quot;&amp;gt;#292929&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFBaseColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the above color resources (or similar).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Shadow&lt;br /&gt;
        x:Key=&amp;quot;UBIKPanelShadow&amp;quot;&lt;br /&gt;
        Brush=&amp;quot;Black&amp;quot; ... /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change the value for the attribute Brush to &amp;quot;Black&amp;quot; to darken the panel shadows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;&amp;gt;#636365&amp;lt;/Color&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;UBIKProgressBar&amp;quot; TargetType=&amp;quot;controls:ProgressBar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;StatusColor&amp;quot; Value=&amp;quot;{Binding ClassificationHandler.StatusColor, Converter={StaticResource IntToColor}, ConverterParameter={StaticResource UBIKProgressBarUndefinedStatuscolor}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The light theme uses UBIKElementColor for the progress bar color when none is defined on the server. However, this does not invert well in a dark theme. Therefore a new color resource should be introduced (&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;) and used in the ConverterParameter of the IntToColor converter, which does not accept a color hex code directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''In UBIKSplashArea:'''&lt;br /&gt;
&lt;br /&gt;
Follow the instructions embedded within the file to replace the splash image with a custom logo. Alternatively, simply adapt the Source attribute of the Image control to &amp;quot;splashlogoinverse.png&amp;quot; to apply an inversion of the UBIK Go logo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Increased FontSize ===&lt;br /&gt;
tbd.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29777</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29777"/>
				<updated>2026-04-28T14:04:01Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Introduction {{Version/WinXSince|5.1.0.0}}{{Version/MobileSince|5.1.0.0}} */ removed version flags as the version is already covered by the catrgory&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList. For more information about Active Lists follow [[UBIK_Active_Lists|this link]].}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. The following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it should be changed to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''after the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''before the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItems}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''after the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''before the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Attention|When binding to ''SelectiveItems'', the ''SelectiveListToItemsConverter'' is outdated and should not be used anymore. Further info see [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]].}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29776</id>
		<title>Mobile XAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29776"/>
				<updated>2026-04-28T13:39:02Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* XAML Changes And Improvements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The User Interface of the Mobile Clients (Android, iOS, Windows) can be fundamentally customized using custom XAML definitions. This customization process is heavily influenced by the [[XAML|XAML Customization Process on the WinX Client]].&lt;br /&gt;
&lt;br /&gt;
= Basics =&lt;br /&gt;
There are predefined XAML templates available that can be customized. If no customizing is found, the default templates will be used.&lt;br /&gt;
&lt;br /&gt;
== Default XAMLs ==&lt;br /&gt;
All default XAML templates that can be customized are available through the Mobile Windows client. You need to go to the app settings and click the &amp;quot;Unpack default XAMLs&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== Differences to WinX/UWP ==&lt;br /&gt;
* Since it's based on the Mobile XAML dialect, you CANNOT use any existing XAML customizings for the WinX/UWP app;&lt;br /&gt;
* Namespace definitions must include the corresponding assembly names;&lt;br /&gt;
* XAML template files have the extension name of '''xamlx''' instead of '''xaml''';&lt;br /&gt;
* You can deploy only those resources that you want to customize. (This is also the case for newer versions of WinX/UWP. {{Version/WinXSince|3.6}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overriding default XAMLs=&lt;br /&gt;
On Windows (WinX/UWP), the &amp;lt;code&amp;gt;[App Package Folder]/LocalState/xaml/&amp;lt;/code&amp;gt; folder can be accessed by the user and the customized XAML files directly added. An alternative to this on all platforms (including Android, iOS, etc.) is to use the ''Import Customizing'' button in the app settings to import the templates, styles, images, etc. (file by file, or all files within a zip package). The changes should be reflected in the UI (except the current page) without restarting the app. After directly editing the customizings (Mobile Windows), you can also use the &amp;quot;Reload customizing&amp;quot; button without restarting the app.&lt;br /&gt;
&lt;br /&gt;
In the following, we're going to override the default light theme color of the app:&lt;br /&gt;
* Unpack the default XAMLs;&lt;br /&gt;
* Pick and deploy the default UBIKThemes.xamlx to the '''xaml''' folder inside the ''LocalState'' folder;&lt;br /&gt;
* Open it with the text editor of your choice and remove everything within the '''ResouceDictionary''' except &amp;lt;code&amp;gt;&amp;lt;Color x:Key=&amp;quot;UBIKLightThemeColor&amp;quot;&amp;gt;blue&amp;lt;/Color&amp;gt;&amp;lt;/code&amp;gt;;&lt;br /&gt;
* Save the changes and reload. You should see changes successfully implemented.&lt;br /&gt;
&lt;br /&gt;
{{Attention| For maintainability reasons, it's HIGHLY recommended to deploy only those XAML resources you want to override. For example, if you only want to customize the UBIKChildArea, don't deploy others like the UBIKMenuArea. If you only want to customize the UBIKChildItem, that's the only content you should include in the UBIKThemes.}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Templates ==&lt;br /&gt;
Custom templates can be added, just like on the WinX/UWP client. Make sure to include all '''namespace definitions''' (as attributes of the '''ContentView''' tag), otherwise the custom template will not load.&lt;br /&gt;
&lt;br /&gt;
Similar to the ''UBIKThemes.xamlx'' file, custom or overridden templates start with a &amp;lt;code&amp;gt;&amp;lt;ContentView&amp;gt;&amp;lt;/code&amp;gt; tag containing all '''namespaces'''. &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; takes a '''ResourceDictionary''' and contains resources like references to converters. Finally, &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; contains the actual layout content (it's best to start with a '''Grid'''). Again, don't forget to add namespaces that you need!&lt;br /&gt;
&lt;br /&gt;
Templates can also be defined in ''UBIKThemes.xamlx''. In this case, they need to be added into the &amp;lt;code&amp;gt;&amp;lt;ResourceDictionary&amp;gt;&amp;lt;/code&amp;gt; inside the &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; template as a &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt;. Similarly, if you want to split up the templates into seperate files, you need to make sure to follow the steps mentioned above and get the content of the &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt; into the &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
{{Attention|Templates defined in separate files will override templates defined in the ''UBIKThemes.xamlx''!}}&lt;br /&gt;
&lt;br /&gt;
=== Bindings in resources ===&lt;br /&gt;
When using bindings such as [[Xamarin_XAML#Content_filtering|this]] in a resource located in a custom template, it is necessary to place the template in a UBIKContentView.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, this is because bindable objects in the ResourceDictionary of a ContentView (the custom template) don't automatically inherit the BindingContext from the container/parent view. UBIKContentView is created to additionally do that.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- UBIKCustomView.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt... ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Container where UBIKCustomView is placed, e.g. UBIKChildArea.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;controls:UBIKContentView Content=&amp;quot;{Binding [UBIKCustomView], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding Images ==&lt;br /&gt;
Images can't be loaded with the default '''Image''' tag, as the image is on different paths on each operating system.&lt;br /&gt;
&lt;br /&gt;
Therefore, there's a custom '''FileImage''' that internally overrides the default ''Image'' with two custom parameters:&lt;br /&gt;
* '''FolderName''' ...The name of the '''folder''' in the '''local folder'''. Only the first level inside the ''LocalState'' folder seems to work.&lt;br /&gt;
* '''FileName''' ...The name of the '''file''' in the said folder. &lt;br /&gt;
&lt;br /&gt;
Make sure to implement the proper namespace as well by adding&lt;br /&gt;
&amp;lt;code&amp;gt;xmlns:fimage=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; into the root item's attributes.&lt;br /&gt;
&lt;br /&gt;
Then, the image can be loaded using:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fimage:FileImage FileName=&amp;quot;image.png&amp;quot; FolderName=&amp;quot;xaml&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This snipped loads the image called '''image.png''' located in the '''xaml''' folder inside the ''LocalState''.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the ''FileImage'' tag doesn't seem to support most attributes. Therefore place it inside a '''Grid''' to achieve a perfect layout.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Icons ==&lt;br /&gt;
Moved to article [[XAML_Tips#Custom_Icons]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Converters==&lt;br /&gt;
:''Main Page: [[Converters_In_Mobile]]''&lt;br /&gt;
&lt;br /&gt;
They are used to convert specific data into some desired output, using custom logic. &lt;br /&gt;
&lt;br /&gt;
Consider the following example:&amp;lt;br/&amp;gt;&lt;br /&gt;
A label saying ''There are no children items available!'' should only be visible if the number of children-items is 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Advanced =&lt;br /&gt;
&lt;br /&gt;
== Feature related ==&lt;br /&gt;
&lt;br /&gt;
=== Customizing Menu Button {{Version/XamarinSince|4.6.0}} === &lt;br /&gt;
&lt;br /&gt;
For the Mobile Client, it is possible to show/hide the '''Menu button''' of the client.&amp;lt;br&amp;gt;&lt;br /&gt;
To customize the visibility of the '''Menu button''' you have to edit the default XAML '''Themes''' file.&lt;br /&gt;
&lt;br /&gt;
* Search for &amp;quot;'''ShowMenuToolBar'''&amp;quot; in the Themes file.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If there isn't any &amp;quot;'''ShowMenuToolBar'''&amp;quot; in your XAML Themes file, you just have to create one, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Boolean x:Key=&amp;quot;ShowMenuToolBar&amp;quot;&amp;gt;true&amp;lt;/x:Boolean&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the value to &amp;quot;true&amp;quot; to show the '''Menu button''' (default value).&lt;br /&gt;
* Set the value to &amp;quot;false&amp;quot; to hide the '''Menu button'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
File:menu_button_show.png|Menu Button shown&lt;br /&gt;
File:menu_button_hiddenV3.png|Menu Button hidden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Content filtering ===&lt;br /&gt;
For the Mobile clients, an &amp;quot;SfDataSourceExt&amp;quot; type is available for filtering list of items using defined expressions.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following example demonstrates how to filter for child items having certain property values. The filtered list and its count can be displayed in the UI.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&lt;br /&gt;
    ...&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;x:String x:Key=&amp;quot;Expresssion&amp;quot;&amp;gt;Item.Values[&amp;amp;quot;MP_YEAR&amp;amp;quot;].Contains(&amp;amp;quot;2019&amp;amp;quot;)&amp;lt;/x:String&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt  x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource Expresssion}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; Unloaded=&amp;quot;{Binding SkipFiltering}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;StackLayout Orientation=&amp;quot;Vertical&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Label Text=&amp;quot;{Binding DisplayItemsCount, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;controls:SfListViewExt ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/StackLayout&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notes on using bindings in ResourceDictionary ====&lt;br /&gt;
In the example shown above, you can see &amp;lt;code&amp;gt;{Binding Children.Items}&amp;lt;/code&amp;gt; is used. For this to work, the SfDataSourceExt control inside the ResourceDictionary must inherit the binding data context properly.&lt;br /&gt;
* In this case, that data context comes from where this template (UBIKChildArea.xamlx) is used, namely the UBIKContentArea.xamlx;&lt;br /&gt;
* When referencing this template in a ContentView control, the binding data context is '''NOT''' automatically inherited by the controls inside the ResourceDictioinary;&lt;br /&gt;
* That's why we use a UBIKContentView control instead. You can find its example usage in the default UBIKContentArea.xamlx template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Search ===&lt;br /&gt;
In the default UBIKMenuArea.xamlx (where the search UI is hosted), there are two commands associated with two events. See below.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SearchBar ...&amp;gt;&lt;br /&gt;
    &amp;lt;SearchBar.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior&lt;br /&gt;
            Command=&amp;quot;{Binding FreeTextSearchCommand}&amp;quot;&lt;br /&gt;
            CommandParameter=&amp;quot;{Binding Path=Text, Source={x:Reference SearchField}}&amp;quot;&lt;br /&gt;
            EventName=&amp;quot;SearchButtonPressed&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding DelayedFreeTextSearchCommand}&amp;quot; EventName=&amp;quot;TextChanged&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/SearchBar.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/SearchBar&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;SearchButtonPressed&amp;lt;/code&amp;gt; is responsible for executing searches after the user confirms the input (e.g. pressing {{{keypress|Enter}}} or the search button).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;TextChanged&amp;lt;/code&amp;gt; is responsible for the &amp;quot;search as you type&amp;quot; behavior. Namely it triggers an automatic search shortly (half second) after the user stops changing the text in the search bar. It can be turned off by simply removing that particular behavior.&lt;br /&gt;
&lt;br /&gt;
=== DisplayViewCommand ===&lt;br /&gt;
This command can be used to [[Custom_View_(Client)|display custom views]].&lt;br /&gt;
&lt;br /&gt;
=== Flashlight  {{Version/MobileSince|5.1.0}}  ===&lt;br /&gt;
For the Mobile clients, it is possible to control the system flashlight via customizing and switch it on or off.&lt;br /&gt;
&lt;br /&gt;
The available properties can, for example, be bound to a Switch or CheckBox, as demonstrated below. These properties allow you to:&lt;br /&gt;
* Determine whether the device supports flashlight functionality (IsFlashSupported)&lt;br /&gt;
* Check whether the flashlight is currently turned on or off (IsFlashEnabled)&lt;br /&gt;
* Toggle the flashlight on or off via user interaction (SwitchFlashLight) &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If an attempt is made to enable the flashlight on a device that does not provide flashlight support, no action is performed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Switch&lt;br /&gt;
! controls:CheckBox&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Switch IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
        IsToggled=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:CheckBox&lt;br /&gt;
    x:Name=&amp;quot;PropertyToggle&amp;quot;&lt;br /&gt;
    CheckSymbol=&amp;quot;&amp;amp;#x1F526;&amp;quot;&lt;br /&gt;
    IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
    IsChecked=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKIconToggleButton}&amp;quot;&lt;br /&gt;
    SymbolSize=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger&lt;br /&gt;
            Binding=&amp;quot;{Binding AppStatus.IsFlashEnabled}&amp;quot;&lt;br /&gt;
            TargetType=&amp;quot;controls:CheckBox&amp;quot;&lt;br /&gt;
            Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Background&amp;quot; Value=&amp;quot;{StaticResource UBIKAccentColor}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
   &amp;lt;/controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:CheckBox&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
To get a good performance in the app UI when using your Xaml customizings, it is recommended to try the following.&lt;br /&gt;
* Always keep your UI structure simple. Choose the most efficient layouts for the scenarios and avoid unnecessary UI elements. Please refer to [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#choose-the-correct-layout &amp;quot;choose the correct layout&amp;quot;] and [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#reduce-the-visual-tree-size &amp;quot;reduce the visual tree size&amp;quot;];&lt;br /&gt;
* Turn on [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-compression layout compression] on wrapping elements that don't have any visual parameters set (reasons stated in the linked documentation).&lt;br /&gt;
{{Hint|There is a default &amp;quot;HeadlessLayout&amp;quot; style available in the app you can use on elements such as Grids, StackLayouts, ContentViews, etc. It turns on [[Xamarin_XAML#Layout_compression_examples|layout compression]] on the applied elements in Xamarin.Android (since we find it not worth the effort in Xamarin.iOS).}}&lt;br /&gt;
{{Attention|If possible, one should always favor designing the UI with less wrapping elements over turning on layout compression on unnecessary ones.}}&lt;br /&gt;
&lt;br /&gt;
=== General performance tips ===&lt;br /&gt;
* Reduce number of views per page&lt;br /&gt;
* Don’t bind things if they could be set static easily&lt;br /&gt;
* If you do not change the default, don’t set it explicit. For example, [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.StackLayout.Orientation?view=xamarin-forms Orientation of StackLayout] is “Vertical” by default. No need to set it manually if you don’t want to change it.&lt;br /&gt;
* Transparency is expensive.&lt;br /&gt;
* Do not put ListViews into ScrollViews.&lt;br /&gt;
* To stack elements, create a grid and add them to the same cell one after another. It’s cheaper than RelativeLayout.&lt;br /&gt;
* Use Margins instead of Paddings.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
* Choose correct Layout, e.g. no need to add a StackLayout if it only has 1 child.&lt;br /&gt;
* [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-options LayoutOptions].Fill or .FillAndExpand are best choice in most cases. And they are already default, so no need to set.&lt;br /&gt;
* Autosize of rows and columns in grids should used as few as possible.&lt;br /&gt;
* RelativeLayout is very expensive. Try to avoid.&lt;br /&gt;
* In StackLayout, make sure there is only 1 LayoutOptions Expand.&lt;br /&gt;
&lt;br /&gt;
=== Labels ===&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/text/label#formatted-text FormattedText] instead of multiple labels.&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.linebreakmode?view=xamarin-forms Linebreakmode] NoWrap (which is already the default).&lt;br /&gt;
* Avoid [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Label.VerticalTextAlignment?view=xamarin-forms VerticalTextAlignment]. Anyway, if needed, use VerticalTextAligment instead of &lt;br /&gt;
VerticalOptions.&lt;br /&gt;
* Use the &amp;quot;TextTransform&amp;quot; attribute to convert the value of the &amp;quot;Text&amp;quot; attribute to either uppercase or lowercase.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label&lt;br /&gt;
      TextTransform=&amp;quot;Uppercase&amp;quot;&lt;br /&gt;
      Text=&amp;quot;{Binding Properties.AllItems[DESCR].DisplayValue}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Images ===&lt;br /&gt;
* Provide images in optimized width and size. Provide multiple resolutions for different usage.&lt;br /&gt;
* Set [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Image.IsOpaque?view=xamarin-forms IsOpaque] to true if image is opaque.&lt;br /&gt;
&lt;br /&gt;
=== Layout compression examples ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource ChangedSymbol}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The code above removes one wrapping element added automatically by the ContentView and demonstrates a good reason to use layout compression because it can not be avoided otherwise.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid Margin=&amp;quot;2&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Margin=&amp;quot;5&amp;quot; Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This example, on the other hand, demonstrates a bad usage of layout compression because it can be easily achieved by better designs such as using only the Label with a merged margin.&lt;br /&gt;
&lt;br /&gt;
Sometimes the content inside a compressed layout appears on a wrong z-index level. For eample:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;BoxView CornerRadius=&amp;quot;14&amp;quot; HeightRequest=&amp;quot;28&amp;quot; WidthRequest=&amp;quot;28&amp;quot; Color=&amp;quot;Red&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource Badge}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView &amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
According to the order of the BoxView and the Label, the latter should appear on top of the former (later ones have higher z-index levels). However, this can be disturbed by layout compression, causing the exact opposite.&lt;br /&gt;
In this case, you can add a &amp;lt;code&amp;gt;xmlns:android=&amp;quot;clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core&amp;quot;&amp;lt;/code&amp;gt; namespace to your Xaml file and manually elevate the Label by specifying &amp;lt;code&amp;gt;android:VisualElement.Elevation=&amp;quot;X&amp;quot;&amp;lt;/code&amp;gt; on it accordingly (X is the delta of the z-index level you want).&lt;br /&gt;
&lt;br /&gt;
=== SfListViewExt ===&lt;br /&gt;
For performance reasons, we created an extended version of the Syncfusion SfListView control and it should be used for all lists in customizings. You need to add a namespace like &amp;lt;code&amp;gt;xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; to your Xaml file and use it like &amp;lt;code&amp;gt;&amp;lt;controls:SfListViewExt ... /&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{Hint|Technically speaking, SfListViewExt informs item view models when their corresponding item views appear on / disappear from the screen. This way, view models can skip a lot of unnecessary work (on the UI) when their views are not visible. '''If SfListView is used instead, the item views will not reflect content changes until the page is reloaded/refreshed.'''}}&lt;br /&gt;
&lt;br /&gt;
It is possible to configure the ListView, that the ScrollPosition is remembered when navigating away from the page, to do so, the property RembemberScrollPosition needs to be set to true. If unset, the value defaults to false and the scroll positions are not remembered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt RememberScrollPosition=&amp;quot;True&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using multiple Lists on one page (e.g. in a TabbedView), it is necessary to set the AutomationId property uniquely for each list on the page, to support the remembering of the ScrollPosition.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delay and LazyLoading ===&lt;br /&gt;
{{Attention|Although both properties can be set in XAML on the two controls, this should not be done. When both the LazyLoading and Delay properties are set, the Delay property is ignored in the code-behind, as otherwise it could lead to unexpected behavior and, in the worst case, result in performance degradation.}}&lt;br /&gt;
&lt;br /&gt;
==== Delay in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
More complex UIs create a delay in rendering which leads to a feeling of &amp;quot;unresponsiveness&amp;quot; when navigating through the client. This is because the app loads and displays everything at once, leading to a larger delay between triggering navigation and completion of page loading.&lt;br /&gt;
 &lt;br /&gt;
While the complexity of the UI directly affects the time taken to render it, the experience of responsiveness can be somewhat improved by actually adding a delay between the loading of the content page, and actual data content (properties, children, etc). By not loading both at once, resources are freed up in the app, leading to a quicker loading of the basic page. The content then loads in at its normal speed.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Starting from version 5.1, a small delay was introduced in the content heavy pages (child page, document page and query page). However, additional delays can also be applied to the custom UI at will, using a new property added to two existing controls used to insert UI templates: UBIKContentView and ContentControl. You can specify a delay (in milliseconds) on both controls so that the content of them is loaded after that amount of time. Examples are shown below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:ContentControl &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    ContentTemplate=&amp;quot;{Binding [UBIKNavigationBar], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hint|The delay won't have any effect if you specify the Content of the UBIKContentView control instead of its Converter, because the Content is immediately laid out by the XAML framework that way. If you don't need a converter to determine the actual template name dynamically, you can still use the TemplateConverter and specify the template name like the following so that the delay applies.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay applies ✅&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; ConverterParameter=&amp;quot;UBIKChildArea&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay doesn't apply ❌&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Content=&amp;quot;{Binding [UBIKChildArea], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Lazy Loading in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
To further improve performance, it is now possible to apply LazyLoading to UBIKContentView and ContentControl. &lt;br /&gt;
&lt;br /&gt;
When a ContentTemplate is assigned to either of these controls and the LazyLoading property is set to true, the content is only loaded when it is explicitly requested. The difference between this and simply controlling the IsVisible condition is that in the latter, resources are still consumed in constructing the UI element, even though it is not shown. Note that Lazy loading requires a trigger to determine when the content should be loaded, and the biggest benefit is experienced when complex elements, especially those hosting a ListView or some kind of object/property collection, are lazy-loaded. &lt;br /&gt;
&lt;br /&gt;
UBIKTabView is optimized to make use of the LazyLoading attribute when it is applied to tab content. Additionally, usage outside of UBIKTabView is possible, as the loading can be triggered as a behavior attached to any other control, such as a button with an IsClicked behavior handler. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UBIKTabView with LazyLoading'''&lt;br /&gt;
&lt;br /&gt;
When used in combination with UBIKTabView (by including the LazyLoading=True attribute on any UBIKContentView or ContentControl content of a tab item, as is now standard {{Version/MobileSince|5.1}}), only the content of the selected tab is rendered (by default, the first tab). The content of non-selected tabs is not. When switching tabs, UBIKTabView takes care of triggering the rendering of the content for the newly selected tab. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView &lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; &lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKPropertyArea&amp;quot; &lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:ContentControl &lt;br /&gt;
            ContentTemplate=&amp;quot;{DynamicResource MyTemplate}&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Using another control as a trigger for lazy loading'''&lt;br /&gt;
&lt;br /&gt;
Other controls (e.g., Button, CheckBox, etc.) can also serve as triggers for lazy loading. The benefit of this is that LazyLoading can still be applied to a complex UBIKContentView or ContentControl that is not hosted within a UBIKTabView. &lt;br /&gt;
&lt;br /&gt;
And example of a usecase is a togglebutton that reveals a section of content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
    &amp;lt;Grid RowDefinitions=&amp;quot;*,50,*&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView x:Name=&amp;quot;ChildContainer&amp;quot; Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;Button&lt;br /&gt;
            x:Name=&amp;quot;LoadDocuments&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;1&amp;quot;&lt;br /&gt;
            HeightRequest=&amp;quot;50&amp;quot;&lt;br /&gt;
            HorizontalOptions=&amp;quot;Center&amp;quot;&lt;br /&gt;
            Text=&amp;quot;LazyLoadDocuments&amp;quot;&lt;br /&gt;
            WidthRequest=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;Clicked&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;behaviors:InvokeMethodAction MethodName=&amp;quot;TriggerLazyLoad&amp;quot; TargetObject=&amp;quot;{Binding Source={x:Reference DocumentsAreaLoader}}&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;/Button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;controls:UBIKContentView&lt;br /&gt;
            x:Name=&amp;quot;DocumentsAreaLoader&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;2&amp;quot;&lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot;&lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKDocumentArea&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Known issues =&lt;br /&gt;
&lt;br /&gt;
=== Headlesslayout style in custom UBIKThemes causing problems ===&lt;br /&gt;
&lt;br /&gt;
In our default '''UBIKThemes''', we are currently using this style for a headless layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;HeadlessLayout&amp;quot; TargetType=&amp;quot;Layout&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;CompressedLayout.IsHeadless&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Setter.Value&amp;gt;&lt;br /&gt;
            &amp;lt;OnPlatform&lt;br /&gt;
                x:TypeArguments=&amp;quot;x:Boolean&amp;quot;&lt;br /&gt;
                Android=&amp;quot;True&amp;quot;&lt;br /&gt;
                WinPhone=&amp;quot;False&amp;quot;&lt;br /&gt;
                iOS=&amp;quot;False&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Setter.Value&amp;gt;&lt;br /&gt;
    &amp;lt;/Setter&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
This style is used for better UI performance on Android.&lt;br /&gt;
Using this style in a '''custom UBIKThemes''' could cause an exception &amp;amp; an app crash, or some objects to disappear.&lt;br /&gt;
The best case would be to '''not''' include it in the custom themes file, as it's unnecessary if you don't want to make any changes here.&lt;br /&gt;
&lt;br /&gt;
'''This issue is only known on Android tablet devices.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataTrigger Issues ===&lt;br /&gt;
==== Conflicting Triggers ====&lt;br /&gt;
DataTriggers in Mobile function better than the equivalent DataTriggerBehavior in UWP as they automatically handle the opposite case when a Boolean attribute value is set. This means that if a boolean DataTrigger is set, such as IsVisible=True, the False visibility will automatically be set if the Binding/Value condition is not met.&lt;br /&gt;
&lt;br /&gt;
However, this means that stacking multiple DataTriggers on the same attribute can lead to unexpected results. For this reason, it is recommended to use as few DataTriggers as possible. &lt;br /&gt;
* Avoid setting the same attribute more than once; do not set the same value as a default attribute and in the DataTrigger (ControlTemplate in the below example).&lt;br /&gt;
* Ideally, use only DataTriggers without a default ControlTemplate. This ensures that content is created only after the trigger evaluation is complete. If a default ControlTemplate is set, it is always loaded immediately, even if another template is applied right after.&lt;br /&gt;
* It is acceptable, but not recommended, to combine a single DataTrigger with an opposite default value, but only if the default value is different from all values set in triggers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Don't Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Instead Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Acceptable, but not recommended&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== DataTrigger to set Footer Properties in a ListView ====&lt;br /&gt;
&lt;br /&gt;
When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases.&lt;br /&gt;
It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty.&lt;br /&gt;
&lt;br /&gt;
If you encounter such an issue, please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger.&lt;br /&gt;
Also, new customizings should consider this workaround as a preventive action.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK IN CERTAIN CASES --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Incorrect glyphs may be shown on buttons ===&lt;br /&gt;
&lt;br /&gt;
When using glyphs on buttons in Mobile, sometimes a different glyph than the expected one will show up when viewing the app on Android.&lt;br /&gt;
They only seem to appear incorrectly when used as the Text property of the button (with FontFamily set to UBIKSymbols, such as the UBIKIconButton style.)&lt;br /&gt;
&lt;br /&gt;
If you encounter this issue please workaround by supplying the icon through the FontImageSource property of the button.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding BulkOperation.InvokeOnItemsCommand}&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;Button.ImageSource&amp;gt;&lt;br /&gt;
          &amp;lt;FontImageSource &lt;br /&gt;
               FontFamily=&amp;quot;{DynamicResource UBIKSymbols}&amp;quot;&lt;br /&gt;
               Glyph=&amp;quot;{x:Static resources:UBIKIcons.MobileDelete}&amp;quot;&lt;br /&gt;
               Color=&amp;quot;{DynamicResource UBIKDarkThemeColor}&amp;quot;&lt;br /&gt;
               Size=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.ImageSource&amp;gt;&lt;br /&gt;
     &amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
          &amp;lt;classes:KeyValueList&amp;gt;&lt;br /&gt;
                    &amp;lt;classes:KeyValueParameter Key=&amp;quot;Command&amp;quot; Value=&amp;quot;DiscardContentCommand&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/classes:KeyValueList&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Buttons and gesture recognizers ===&lt;br /&gt;
In Mobile XAML, you can use gesture recognizers on many UI elements such as a Grid to enable the latter to interact with user inputs.&lt;br /&gt;
&lt;br /&gt;
However, we've already made quite a lot of experience that gesture recognizers do not always work on Android and iOS when used on a Button control.&lt;br /&gt;
For example, the following Button won't properly invoke the command on said platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK!!! --&amp;gt;&lt;br /&gt;
&amp;lt;Button ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.GestureRecognizers&amp;gt;&lt;br /&gt;
        &amp;lt;TapGestureRecognizer Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.GestureRecognizers&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Therefore, you should always seek alternatives for Buttons.&lt;br /&gt;
'''If only one command is needed''', use the standard Command property on the Button, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; .../&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Or if multiple commands are needed, use Behaviors '''instead''', e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS ALSO WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button xmlns:behaviors=&amp;quot;clr-namespace:UBIK.CPL.Behaviors;assembly=UBIK.CPL&amp;quot; ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding NavigateBackCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== No dynamic reloading of Document Viewer ===&lt;br /&gt;
[[File:PDFViewerFixWiki.JPG]]&lt;br /&gt;
&lt;br /&gt;
In a customizing that combines a single-selection list of documents with some kind of viewer (especially UBIKDocumentContentArea), it is generally the case that switching the document causes the document viewer to then appear blank. The technical reason is that the PDFViewer used in the UBIKDocumentContentArea is not reloaded once the document content is reloaded. &lt;br /&gt;
&lt;br /&gt;
An easy fix is to apply a DataTrigger that unloads the ContentView when the document content is null, as the ContentView is forced to rerender itself when the trigger condition is no longer met.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Document Viewer --&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    x:Name=&amp;quot;DoucmentViewer&amp;quot; &lt;br /&gt;
    BindingContext=&amp;quot;{Binding SelectedItem, Source={x:Reference DocumentList}}&amp;quot;&lt;br /&gt;
    Content=&amp;quot;{Binding [UBIKDocumentContentArea], Source={x:Static services:TemplateService.Instance}}&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger TargetType=&amp;quot;controls:UBIKContentView&amp;quot; Binding=&amp;quot;{Binding SelectedItem.DocumentViewModel.DocumentContent, Source={x:Reference DocumentList}, Converter={StaticResource NullToBool}}&amp;quot; Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Content&amp;quot; Value=&amp;quot;{x:Null}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Issues with SfPullToRefresh in Mobile client {{Version/MobileSince|5.0}} ===&lt;br /&gt;
Due to a third-party issue, problems may occur on Mobile Android when using the SfPullToRefresh control in combination with the SfListViewExt. This can result in e.g. navigation or task interaction sometimes requiring multiple clicks.&lt;br /&gt;
In general, and due to more issues, it's not recommended to use the SfPullToRefresh control.&lt;br /&gt;
In our Mobile standard client, the PullToRefresh control has been replaced by a Refresh button in the Context Menu.&lt;br /&gt;
If you still decide to use SfPullToRefresh, there are a few points to consider:&lt;br /&gt;
&lt;br /&gt;
==== Avoid multiple SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue that causes the app to freeze, avoid placing more than one SfPullToRefresh controls as siblings in a xaml hierarchy. If switching between contents in a SfPullToRefresh control is necessary use separate DataTemplates for the contents and use e.g. a DataTrigger to set one of them as the ControlTemplate of a ContentControl inside the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_multiple_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
==== Avoid using SyncFusion ListViews directly in SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue on some Android devices that can cause some items in a SfListViewExt to be rendered incorrectly or not at all after triggering a PullToRefresh, avoid placing a SfListViewExt directly in a SfPullToRefresh control. Instead, wrap the ListView in a DataTemplate and use it in a ContentControl as a child of the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_using_SyncFusion_ListViews_directly_in_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= UBIK Go (Maui) Customizing Guide {{Version/MobileSince|5.1}} =&lt;br /&gt;
The change to Maui was taken as an opportunity both to visually update the client's default UI, and to add some quality of life changes aiming to reduce the amount of customizing needed.&lt;br /&gt;
&lt;br /&gt;
This section describes the standard UI and how to more easily customize it.&lt;br /&gt;
&lt;br /&gt;
For differences between Xamarin and Maui, please refer to the [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] article.&lt;br /&gt;
&lt;br /&gt;
== XAML Changes And Improvements ==&lt;br /&gt;
=== Styles and Resources ===&lt;br /&gt;
* Various color elements were renamed for neutrality. This will help clarify the purpose of color themes, and make it easier to keep track of in customizings. The old versions are still available but moved to the Obsolete section of UBIKThemes. &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKDarkTextColor --&amp;gt; UBIKRegularTextColor&lt;br /&gt;
UBIKDarkThemeColor --&amp;gt; UBIKMainThemeColor&lt;br /&gt;
UBIKLightTextColor --&amp;gt; UBIKMainThemeContrastColor&lt;br /&gt;
UBIKLightThemeColor --&amp;gt; UBIKBasePageColor&lt;br /&gt;
UBIKSubtleTextColor --&amp;gt; UBIKMediumTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Furthermore, effort was made to create 'contrast pairs' throughout the client; for example, UBIKMainThemeContrastColor is defined primarily for texts layered on elements of UBIKMainThemeColor (such as the title bar and text). &lt;br /&gt;
** The intention here is that this pair can be safely customized with no surprises, that cannot be guaranteed when using non-paired resource. For example, UBIKMainThemeContrastColor  and UBIKBasePageColor are both white in the default customizing, but if UBIKBasePageColor that were to be layered over UBIKMainThemeColor, it would result in a black-on-black issue in a dark theme customizing. &lt;br /&gt;
** The 'pairs' are; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKMainThemeColor x UBIKMainThemeContrastColor&lt;br /&gt;
UBIKBasePageColor x UBIKRegularTextColor&lt;br /&gt;
UBIKButtonColor x UBIKButtonTextColor &lt;br /&gt;
UBIKButtonToggledColor x UBIKButtonToggledTextColor &lt;br /&gt;
UBIKPDFBaseColor x UBIKPDFTextColor&lt;br /&gt;
UBIKPDFSelectedToolColor x UBIKPDFSelectedToolTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* An effort was also made to avoid hardcoding numeric values on the client. Reusable resources were introduced instead; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonIconSize&amp;quot;&amp;gt;20&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonPanelSize&amp;quot;&amp;gt;56&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonSize&amp;quot;&amp;gt;44&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKListItemSize&amp;quot;&amp;gt;80&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKTileItemSize&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;120&amp;quot; Phone=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKCaptionTextSize&amp;quot;&amp;gt;14&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKBodyTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKTitleTextSize&amp;quot;&amp;gt;18&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKProgressBarHeight&amp;quot;&amp;gt;4&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptivePadding&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;8,0&amp;quot; Phone=&amp;quot;4,0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptiveSpacing&amp;quot; x:TypeArguments=&amp;quot;x:Double&amp;quot; Default=&amp;quot;16&amp;quot; Phone=&amp;quot;8&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
* Regarding corporate colors, there are now additional resources to customize, aside from UBIKAccentColor;&lt;br /&gt;
** UBIKHighlightColor is a secondary accent color used for highlighting (eg. Multiselect mode or edited Property). {{Version/MobileSince|5.1.0.0}} Transparency has been added to the UBIKHighlightColor.&lt;br /&gt;
** UBIKGradientColor {{Version/MobileSince|5.1.0.0}} is used in combination with UBIKAccentColor to form a gradient on the Authentication area. &lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
* As in WinX {{Version/WinXSince|4.0}}, the various possible object status indicators were exported to a template called '''StatusIndicators''' located in UBIKThemes. These are now displayed at the top right of the item template, with a semi-opaque underlay in case the indicators appear over Title/SubTitle text.&lt;br /&gt;
* '''SfTextInputLayout''' was introduced and is used in various locations (Authentication, and properties).&lt;br /&gt;
* Default values for size, font, color, etc, were applied to various controls (Picker, Entry etc) for consistency.&lt;br /&gt;
* New '''SfListView''' styles were introduced and the originals moved to the Obsolete section.&lt;br /&gt;
** The listview now has a background color (UBIKMediumElementColor) and child item templates are now responsible for providing their own background color (UBIKBasePageColor that is applied to the Grid style UBIKItemBase). &lt;br /&gt;
*** The intention is to provide visual distinction from actual list items and empty list 'space'.&lt;br /&gt;
*** However, this will interfere with lists that rely on the SelectionBackground to highlight selection. This is solved in various ways throughout the UI, such as the SelectedIndicator used in UBIKChildItem, or the seperate SelectedItem and SelectedItemTemplate templates used in UBIKEditGuid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Adaptivity ===&lt;br /&gt;
- tbd.&lt;br /&gt;
&lt;br /&gt;
=== Layout and Functionality ===&lt;br /&gt;
* '''UBIKNavigationBar''' was introduced as a templatable alternative to the hardcoded context menu (accessed by the '...' button in the top right of the content area) and is fully customizable.&lt;br /&gt;
* Shadowed panels were introduced in place of floating buttons in the content tabs (Children, Properties). For consistency, both are located at the top of their respective tab content.&lt;br /&gt;
* '''UBIKChildItem''' was visually simplified. It now displays a simple icon, the Title (and MRO progress, if any) and Subtitle, and StatusIndicators in the top right. The progressbar is now displayed across the bottom of the item.&lt;br /&gt;
* '''UBIKTaskItem''' was completely redesigned. &lt;br /&gt;
** Aside from the StatusIndicators that appear in the top right uniformly on any context object, MRO-related ones (Task status (Finished, NA, or Not Necessary, Group Limit and Size, Previous Value, and Tech Indicator) appear on the top left contained in an SfChipGroup. &lt;br /&gt;
** The main area of the task item is previously split between Title and task-related input. On smaller devices or in editing regardless of screen size, the input area sizes becomes larger.&lt;br /&gt;
** The task related input now looks visually distinct with and without a value. UBIKButton(Text)Color is used for 'new' tasks, while UBIKButtonToggled(Text)Color is used for the 'value filled' state.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
* '''UBIKRootItem''' (formerly UBIKMainItem) was introduced simply so that the Title, Area, and Item are organized together within the default and customizing folders. For compatibility, UBIKMainItem still exists in the default folder, however, be aware that the listview in UBIKRootArea now requests UBIKRootItem as the ItemTemplate by default.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Customizing Guides ==&lt;br /&gt;
=== Dark Theme ===&lt;br /&gt;
While UBIK Go does not include a Dark Theme by default, a lot of effort was invested in optimizing the color resources used throughout the app, so that a dark theme can be quickly customized. Furthermore, below is a list of recommended changes that result in a functional dark theme.&lt;br /&gt;
&lt;br /&gt;
'''In UBIKThemes:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;x:String x:Key=&amp;quot;TextFontFamily&amp;quot;&amp;gt;InterL&amp;lt;/x:String&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the value for TextFontFamily with &amp;quot;InterL&amp;quot;; It is recommended to use a thinner font as white on black looks bolder than the inverse.&lt;br /&gt;
A 'Light' version of the default font font was added and can be accessed using the tag InterL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKRegularTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMediumTextColor&amp;quot;&amp;gt;#A3ffffff&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBasePageColor&amp;quot;&amp;gt;#3a3a3c&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMainThemeColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBorderColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKElementColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKLightElementColor&amp;quot;&amp;gt;#222124&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKFinishedElementColor&amp;quot;&amp;gt;#2a2a2b&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKOverlayElementColor&amp;quot;&amp;gt;#3D000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKImageOverlayColor&amp;quot;&amp;gt;#A3000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt; &lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledTextColor&amp;quot;&amp;gt;Black&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolTextColor&amp;quot;&amp;gt;#292929&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFBaseColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the above color resources (or similar).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Shadow&lt;br /&gt;
        x:Key=&amp;quot;UBIKPanelShadow&amp;quot;&lt;br /&gt;
        Brush=&amp;quot;Black&amp;quot; ... /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change the value for the attribute Brush to &amp;quot;Black&amp;quot; to darken the panel shadows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;&amp;gt;#636365&amp;lt;/Color&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;UBIKProgressBar&amp;quot; TargetType=&amp;quot;controls:ProgressBar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;StatusColor&amp;quot; Value=&amp;quot;{Binding ClassificationHandler.StatusColor, Converter={StaticResource IntToColor}, ConverterParameter={StaticResource UBIKProgressBarUndefinedStatuscolor}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The light theme uses UBIKElementColor for the progress bar color when none is defined on the server. However, this does not invert well in a dark theme. Therefore a new color resource should be introduced (&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;) and used in the ConverterParameter of the IntToColor converter, which does not accept a color hex code directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''In UBIKSplashArea:'''&lt;br /&gt;
&lt;br /&gt;
Follow the instructions embedded within the file to replace the splash image with a custom logo. Alternatively, simply adapt the Source attribute of the Image control to &amp;quot;splashlogoinverse.png&amp;quot; to apply an inversion of the UBIK Go logo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Increased FontSize ===&lt;br /&gt;
tbd.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29775</id>
		<title>Version 5.1 (Mobile)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29775"/>
				<updated>2026-04-28T13:35:37Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|Existing pre 5.0 XAMLs are not compatible with UBIK Mobile client 5.1. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|UBIK 5 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|The minimum supported OS versions are:&lt;br /&gt;
* Android 9;&lt;br /&gt;
* iOS 12.}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Preview}}: Available through Google Play Store's [https://play.google.com/store/apps/details?id=com.augmensys.ubik.go invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/Kmb1HG9E invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Preview}}: Available through Apple App Store's [https://testflight.apple.com/join/yHRnbYbt invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|Windows: Store Preview}}: The mobile Windows client is not an official product and is only distributed as test versions upon request and/or in our [https://release.augmensys.com/download/modules/client/mobile/ release portal].&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* UBIK Client now supports [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Tasks]] configured with an [[Active_List_Client|Active List]].&lt;br /&gt;
* Added  [[MRO_Objects_(Client)#Numeric_Task|Numeric Tasks]] to record numeric values that are checked against an acceptable value range.&lt;br /&gt;
* UBIK now supports [[Traits]] which are more flexible when it comes to server side configuration and maintenance.&lt;br /&gt;
* Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
* The system flashlight can now also be enabled or disabled via XAML customization. For detailed information, see [[Mobile XAML#Flashlight|Flashlight]]&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* [[MRO_Objects_(Client)#Signature_Task|MRO Signature Tasks]] have been introduced, which automatically displays the signee as well as the validation timestamp after the task has been signed.&lt;br /&gt;
* Fixed an issue where changes in property editing were not discarded when using the default Back button.&lt;br /&gt;
* Fixed an issue where the application crashed on Windows when navigating back from the VideoPlayer.&lt;br /&gt;
* Icon set Addition 8: Added Show/Hide, AI, Info, and various Procedure icons.&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where MRO task items displayed an incorrect DataTemplate after scrolling within a list.&lt;br /&gt;
* Fixed an issue where the client could fail at large file uploads (or even crash) due to device running out of memory.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems. The standard UI is not yet redesigned to show multi-line texts, though. But you can do so in customizing if necessary.&lt;br /&gt;
* Fixed the UI of some templates that weren't displayed correctly in Multi Select Mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.30 2026-03-02 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.29 on 2026-02-26 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue where the POI button was only visible under certain condition (ShowUnreleasedFeatures in the profile is set to true).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.28 on 2026-02-10 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* The following features which existed in pre 5.0 versions are now available again in 5.1.&lt;br /&gt;
** [[Map_View|Map view]].&lt;br /&gt;
** [[POI_View_(Mobile)|POI view]]. (Aruco and OCR are not yet supported)&lt;br /&gt;
** Location service.&lt;br /&gt;
** [[Native_Push_(Client)|Native push]].&lt;br /&gt;
** [[Charts]].&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Complete UI overhaul introduces a cleaner, more modern and adaptive user interface with various quality of life improvements.&lt;br /&gt;
* UBIKTabView supports both dynamic and static items in combination with lazy loading.&lt;br /&gt;
* Files in the app's data folder can now be opened or deleted directly in the developer settings.&lt;br /&gt;
* Introduced a fully resource-driven UI theming system enabling fast, safe customization (dark mode, resizing, and consistent styling) by adapting a small set of centralized resources.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* Fixed an issue where remembered scroll positions were lost when the ItemsSource property of an SfListViewExt changed (e.g., Properties.ShowAllProperties).&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed issue that caused app to be stuck on splash screen after resuming from background.&lt;br /&gt;
* Fixed an issue where StatusColor was not shown in the UI for objects that didn't additionally have a Progress.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Fixed an issue that caused content of the custom ContentControl to not be rendered sometimes.&lt;br /&gt;
* (Android) Fixed an issue in the WebView where some links could not be opened.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the deletion of some objects was not reflected in the UI until refresh.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true. In Mobile, deleting the last annotation does not correctly update the editor's internal edit state. As a result, the Save button may remain visible even though no edits exist.&lt;br /&gt;
* When changing the device orientation during attaching a photo on iOS, the app gets stuck. This is an issue Microsoft confirmed in .NET9 and will fix in .NET10.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
* The periodic execution of background pushes is not guaranteed on iOS (the native push feature doesn't have this issue).&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* It is currently not possible to select which camera to use for AR views (e.g. scan page) on Windows.&lt;br /&gt;
* SfPullToRefresh was removed due to [[Mobile_XAML#Issues_with_SfPullToRefresh_in_Mobile_client|existing issues]], and replaced with a Refresh option in the Context menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
* Due to the change of the underlying XAML technology, the existing XAMLs for the old mobile clients (pre 5.0) are no longer compatible. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.&lt;br /&gt;
* There are some XAML changes necessary when using the new [[Active_List_Client|Active List]] feature, or when using the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]]. These XAML changes are explained [[Active_List_Client#XAML|here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29774</id>
		<title>Version 5.1 (Mobile)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29774"/>
				<updated>2026-04-28T13:11:02Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|Existing pre 5.0 XAMLs are not compatible with UBIK Mobile client 5.1. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|UBIK 5 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|The minimum supported OS versions are:&lt;br /&gt;
* Android 9;&lt;br /&gt;
* iOS 12.}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Preview}}: Available through Google Play Store's [https://play.google.com/store/apps/details?id=com.augmensys.ubik.go invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/Kmb1HG9E invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Preview}}: Available through Apple App Store's [https://testflight.apple.com/join/yHRnbYbt invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|Windows: Store Preview}}: The mobile Windows client is not an official product and is only distributed as test versions upon request and/or in our [https://release.augmensys.com/download/modules/client/mobile/ release portal].&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* UBIK Client now supports [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Tasks]] configured with an [[Active_List_Client|Active List]].&lt;br /&gt;
* Added  [[MRO_Objects_(Client)#Numeric_Task|Numeric Tasks]] to record numeric values that are checked against an acceptable value range.&lt;br /&gt;
* UBIK now supports [[Traits]] which are more flexible when it comes to server side configuration and maintenance.&lt;br /&gt;
* Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
* The system flashlight can now also be enabled or disabled via XAML customization. For detailed information, see [[Mobile XAML#Flashlight|Flashlight]]&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* [[MRO_Objects_(Client)#Signature_Task|MRO Signature Tasks]] have been introduced, which automatically displays the signee as well as the validation timestamp after the task has been signed.&lt;br /&gt;
* Fixed an issue where changes in property editing were not discarded when using the default Back button.&lt;br /&gt;
* Fixed an issue where the application crashed on Windows when navigating back from the VideoPlayer.&lt;br /&gt;
* Icon set Addition 8: Added Show/Hide, AI, Info, and various Procedure icons.&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where MRO task items displayed an incorrect DataTemplate after scrolling within a list.&lt;br /&gt;
* Fixed an issue where the client could fail at large file uploads (or even crash) due to device running out of memory.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems. The standard UI is not yet redesigned to show multi-line texts, though. But you can do so in customizing if necessary.&lt;br /&gt;
* Fixed the UI of some templates that weren't displayed correctly in Multi Select Mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.30 2026-03-02 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.29 on 2026-02-26 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue where the POI button was only visible under certain condition (ShowUnreleasedFeatures in the profile is set to true).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.28 on 2026-02-10 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* The following features which existed in pre 5.0 versions are now available again in 5.1.&lt;br /&gt;
** [[Map_View|Map view]].&lt;br /&gt;
** [[POI_View_(Mobile)|POI view]]. (Aruco and OCR are not yet supported)&lt;br /&gt;
** Location service.&lt;br /&gt;
** [[Native_Push_(Client)|Native push]].&lt;br /&gt;
** [[Charts]].&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Complete UI overhaul introduces a cleaner, more modern and adaptive user interface with various quality of life improvements.&lt;br /&gt;
* UBIKTabView supports both dynamic and static items in combination with lazy loading.&lt;br /&gt;
* Files in the app's data folder can now be opened or deleted directly in the developer settings.&lt;br /&gt;
* Introduced a fully resource-driven UI theming system enabling fast, safe customization (dark mode, resizing, and consistent styling) by adapting a small set of centralized resources.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* Fixed an issue where remembered scroll positions were lost when the ItemsSource property of an SfListViewExt changed (e.g., Properties.ShowAllProperties).&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed issue that caused app to be stuck on splash screen after resuming from background.&lt;br /&gt;
* Fixed an issue where StatusColor was not shown in the UI for objects that didn't additionally have a Progress.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Fixed an issue that caused content of the custom ContentControl to not be rendered sometimes.&lt;br /&gt;
* (Android) Fixed an issue in the WebView where some links could not be opened.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the deletion of some objects was not reflected in the UI until refresh.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true. In Mobile, deleting the last annotation does not correctly update the editor's internal edit state. As a result, the Save button may remain visible even though no edits exist.&lt;br /&gt;
* When changing the device orientation during attaching a photo on iOS, the app gets stuck. This is an issue Microsoft confirmed in .NET9 and will fix in .NET10.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
* The periodic execution of background pushes is not guaranteed on iOS (the native push feature doesn't have this issue).&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* It is currently not possible to select which camera to use for AR views (e.g. scan page) on Windows.&lt;br /&gt;
* SfPullToRefresh was removed due to [[Mobile_XAML#Issues_with_SfPullToRefresh_in_Mobile_client|existing issues]], and replaced with a Refresh option in the Context menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
* Due to the change of the underlying XAML technology, the existing XAMLs for the old mobile clients (pre 5.0) are no longer compatible. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.&lt;br /&gt;
* There are some XAML changes necessary when using the new [[Active_List_Client|Active List]] feature, or when using the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]]. These XAML changes are explained [[Active_List_Client#XAML|here]].&lt;br /&gt;
* A new UBIKGradientColor has been added to the [[Mobile_XAML#Styles_and_Resources|Mobile Xaml resources]], which is now replacing the UBIKHighlightColor used for the gradient on the Authentication area. Additionally, some transparency has been added to the UBIKHighlightColor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29773</id>
		<title>Mobile XAML</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Mobile_XAML&amp;diff=29773"/>
				<updated>2026-04-28T13:08:34Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Styles and Resources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The User Interface of the Mobile Clients (Android, iOS, Windows) can be fundamentally customized using custom XAML definitions. This customization process is heavily influenced by the [[XAML|XAML Customization Process on the WinX Client]].&lt;br /&gt;
&lt;br /&gt;
= Basics =&lt;br /&gt;
There are predefined XAML templates available that can be customized. If no customizing is found, the default templates will be used.&lt;br /&gt;
&lt;br /&gt;
== Default XAMLs ==&lt;br /&gt;
All default XAML templates that can be customized are available through the Mobile Windows client. You need to go to the app settings and click the &amp;quot;Unpack default XAMLs&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
== Differences to WinX/UWP ==&lt;br /&gt;
* Since it's based on the Mobile XAML dialect, you CANNOT use any existing XAML customizings for the WinX/UWP app;&lt;br /&gt;
* Namespace definitions must include the corresponding assembly names;&lt;br /&gt;
* XAML template files have the extension name of '''xamlx''' instead of '''xaml''';&lt;br /&gt;
* You can deploy only those resources that you want to customize. (This is also the case for newer versions of WinX/UWP. {{Version/WinXSince|3.6}})&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Overriding default XAMLs=&lt;br /&gt;
On Windows (WinX/UWP), the &amp;lt;code&amp;gt;[App Package Folder]/LocalState/xaml/&amp;lt;/code&amp;gt; folder can be accessed by the user and the customized XAML files directly added. An alternative to this on all platforms (including Android, iOS, etc.) is to use the ''Import Customizing'' button in the app settings to import the templates, styles, images, etc. (file by file, or all files within a zip package). The changes should be reflected in the UI (except the current page) without restarting the app. After directly editing the customizings (Mobile Windows), you can also use the &amp;quot;Reload customizing&amp;quot; button without restarting the app.&lt;br /&gt;
&lt;br /&gt;
In the following, we're going to override the default light theme color of the app:&lt;br /&gt;
* Unpack the default XAMLs;&lt;br /&gt;
* Pick and deploy the default UBIKThemes.xamlx to the '''xaml''' folder inside the ''LocalState'' folder;&lt;br /&gt;
* Open it with the text editor of your choice and remove everything within the '''ResouceDictionary''' except &amp;lt;code&amp;gt;&amp;lt;Color x:Key=&amp;quot;UBIKLightThemeColor&amp;quot;&amp;gt;blue&amp;lt;/Color&amp;gt;&amp;lt;/code&amp;gt;;&lt;br /&gt;
* Save the changes and reload. You should see changes successfully implemented.&lt;br /&gt;
&lt;br /&gt;
{{Attention| For maintainability reasons, it's HIGHLY recommended to deploy only those XAML resources you want to override. For example, if you only want to customize the UBIKChildArea, don't deploy others like the UBIKMenuArea. If you only want to customize the UBIKChildItem, that's the only content you should include in the UBIKThemes.}}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Templates ==&lt;br /&gt;
Custom templates can be added, just like on the WinX/UWP client. Make sure to include all '''namespace definitions''' (as attributes of the '''ContentView''' tag), otherwise the custom template will not load.&lt;br /&gt;
&lt;br /&gt;
Similar to the ''UBIKThemes.xamlx'' file, custom or overridden templates start with a &amp;lt;code&amp;gt;&amp;lt;ContentView&amp;gt;&amp;lt;/code&amp;gt; tag containing all '''namespaces'''. &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; takes a '''ResourceDictionary''' and contains resources like references to converters. Finally, &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; contains the actual layout content (it's best to start with a '''Grid'''). Again, don't forget to add namespaces that you need!&lt;br /&gt;
&lt;br /&gt;
Templates can also be defined in ''UBIKThemes.xamlx''. In this case, they need to be added into the &amp;lt;code&amp;gt;&amp;lt;ResourceDictionary&amp;gt;&amp;lt;/code&amp;gt; inside the &amp;lt;code&amp;gt;&amp;lt;ContentView.Resources&amp;gt;&amp;lt;/code&amp;gt; template as a &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt;. Similarly, if you want to split up the templates into seperate files, you need to make sure to follow the steps mentioned above and get the content of the &amp;lt;code&amp;gt;&amp;lt;DataTemplate&amp;gt;&amp;lt;/code&amp;gt; into the &amp;lt;code&amp;gt;&amp;lt;ContentView.Content&amp;gt;&amp;lt;/code&amp;gt; tag.&lt;br /&gt;
&lt;br /&gt;
{{Attention|Templates defined in separate files will override templates defined in the ''UBIKThemes.xamlx''!}}&lt;br /&gt;
&lt;br /&gt;
=== Bindings in resources ===&lt;br /&gt;
When using bindings such as [[Xamarin_XAML#Content_filtering|this]] in a resource located in a custom template, it is necessary to place the template in a UBIKContentView.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, this is because bindable objects in the ResourceDictionary of a ContentView (the custom template) don't automatically inherit the BindingContext from the container/parent view. UBIKContentView is created to additionally do that.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- UBIKCustomView.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt... ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Container where UBIKCustomView is placed, e.g. UBIKChildArea.xamlx --&amp;gt;&lt;br /&gt;
&amp;lt;ContentView...&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;controls:UBIKContentView Content=&amp;quot;{Binding [UBIKCustomView], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Adding Images ==&lt;br /&gt;
Images can't be loaded with the default '''Image''' tag, as the image is on different paths on each operating system.&lt;br /&gt;
&lt;br /&gt;
Therefore, there's a custom '''FileImage''' that internally overrides the default ''Image'' with two custom parameters:&lt;br /&gt;
* '''FolderName''' ...The name of the '''folder''' in the '''local folder'''. Only the first level inside the ''LocalState'' folder seems to work.&lt;br /&gt;
* '''FileName''' ...The name of the '''file''' in the said folder. &lt;br /&gt;
&lt;br /&gt;
Make sure to implement the proper namespace as well by adding&lt;br /&gt;
&amp;lt;code&amp;gt;xmlns:fimage=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; into the root item's attributes.&lt;br /&gt;
&lt;br /&gt;
Then, the image can be loaded using:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;fimage:FileImage FileName=&amp;quot;image.png&amp;quot; FolderName=&amp;quot;xaml&amp;quot;/&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This snipped loads the image called '''image.png''' located in the '''xaml''' folder inside the ''LocalState''.&lt;br /&gt;
&lt;br /&gt;
Furthermore, the ''FileImage'' tag doesn't seem to support most attributes. Therefore place it inside a '''Grid''' to achieve a perfect layout.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Custom Icons ==&lt;br /&gt;
Moved to article [[XAML_Tips#Custom_Icons]].&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Converters==&lt;br /&gt;
:''Main Page: [[Converters_In_Mobile]]''&lt;br /&gt;
&lt;br /&gt;
They are used to convert specific data into some desired output, using custom logic. &lt;br /&gt;
&lt;br /&gt;
Consider the following example:&amp;lt;br/&amp;gt;&lt;br /&gt;
A label saying ''There are no children items available!'' should only be visible if the number of children-items is 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Advanced =&lt;br /&gt;
&lt;br /&gt;
== Feature related ==&lt;br /&gt;
&lt;br /&gt;
=== Customizing Menu Button {{Version/XamarinSince|4.6.0}} === &lt;br /&gt;
&lt;br /&gt;
For the Mobile Client, it is possible to show/hide the '''Menu button''' of the client.&amp;lt;br&amp;gt;&lt;br /&gt;
To customize the visibility of the '''Menu button''' you have to edit the default XAML '''Themes''' file.&lt;br /&gt;
&lt;br /&gt;
* Search for &amp;quot;'''ShowMenuToolBar'''&amp;quot; in the Themes file.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If there isn't any &amp;quot;'''ShowMenuToolBar'''&amp;quot; in your XAML Themes file, you just have to create one, like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Boolean x:Key=&amp;quot;ShowMenuToolBar&amp;quot;&amp;gt;true&amp;lt;/x:Boolean&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Set the value to &amp;quot;true&amp;quot; to show the '''Menu button''' (default value).&lt;br /&gt;
* Set the value to &amp;quot;false&amp;quot; to hide the '''Menu button'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;500&amp;quot;&amp;gt;&lt;br /&gt;
File:menu_button_show.png|Menu Button shown&lt;br /&gt;
File:menu_button_hiddenV3.png|Menu Button hidden&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Content filtering ===&lt;br /&gt;
For the Mobile clients, an &amp;quot;SfDataSourceExt&amp;quot; type is available for filtering list of items using defined expressions.&amp;lt;br /&amp;gt;&lt;br /&gt;
The following example demonstrates how to filter for child items having certain property values. The filtered list and its count can be displayed in the UI.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView&lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&lt;br /&gt;
    ...&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;x:String x:Key=&amp;quot;Expresssion&amp;quot;&amp;gt;Item.Values[&amp;amp;quot;MP_YEAR&amp;amp;quot;].Contains(&amp;amp;quot;2019&amp;amp;quot;)&amp;lt;/x:String&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt  x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource Expresssion}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; Unloaded=&amp;quot;{Binding SkipFiltering}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;StackLayout Orientation=&amp;quot;Vertical&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Label Text=&amp;quot;{Binding DisplayItemsCount, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;controls:SfListViewExt ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/StackLayout&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Notes on using bindings in ResourceDictionary ====&lt;br /&gt;
In the example shown above, you can see &amp;lt;code&amp;gt;{Binding Children.Items}&amp;lt;/code&amp;gt; is used. For this to work, the SfDataSourceExt control inside the ResourceDictionary must inherit the binding data context properly.&lt;br /&gt;
* In this case, that data context comes from where this template (UBIKChildArea.xamlx) is used, namely the UBIKContentArea.xamlx;&lt;br /&gt;
* When referencing this template in a ContentView control, the binding data context is '''NOT''' automatically inherited by the controls inside the ResourceDictioinary;&lt;br /&gt;
* That's why we use a UBIKContentView control instead. You can find its example usage in the default UBIKContentArea.xamlx template.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Search ===&lt;br /&gt;
In the default UBIKMenuArea.xamlx (where the search UI is hosted), there are two commands associated with two events. See below.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;SearchBar ...&amp;gt;&lt;br /&gt;
    &amp;lt;SearchBar.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior&lt;br /&gt;
            Command=&amp;quot;{Binding FreeTextSearchCommand}&amp;quot;&lt;br /&gt;
            CommandParameter=&amp;quot;{Binding Path=Text, Source={x:Reference SearchField}}&amp;quot;&lt;br /&gt;
            EventName=&amp;quot;SearchButtonPressed&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding DelayedFreeTextSearchCommand}&amp;quot; EventName=&amp;quot;TextChanged&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/SearchBar.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/SearchBar&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;SearchButtonPressed&amp;lt;/code&amp;gt; is responsible for executing searches after the user confirms the input (e.g. pressing {{{keypress|Enter}}} or the search button).&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
The one for &amp;lt;code&amp;gt;TextChanged&amp;lt;/code&amp;gt; is responsible for the &amp;quot;search as you type&amp;quot; behavior. Namely it triggers an automatic search shortly (half second) after the user stops changing the text in the search bar. It can be turned off by simply removing that particular behavior.&lt;br /&gt;
&lt;br /&gt;
=== DisplayViewCommand ===&lt;br /&gt;
This command can be used to [[Custom_View_(Client)|display custom views]].&lt;br /&gt;
&lt;br /&gt;
=== Flashlight  {{Version/MobileSince|5.1.0}}  ===&lt;br /&gt;
For the Mobile clients, it is possible to control the system flashlight via customizing and switch it on or off.&lt;br /&gt;
&lt;br /&gt;
The available properties can, for example, be bound to a Switch or CheckBox, as demonstrated below. These properties allow you to:&lt;br /&gt;
* Determine whether the device supports flashlight functionality (IsFlashSupported)&lt;br /&gt;
* Check whether the flashlight is currently turned on or off (IsFlashEnabled)&lt;br /&gt;
* Toggle the flashlight on or off via user interaction (SwitchFlashLight) &lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
If an attempt is made to enable the flashlight on a device that does not provide flashlight support, no action is performed.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Switch&lt;br /&gt;
! controls:CheckBox&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Switch IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
        IsToggled=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:CheckBox&lt;br /&gt;
    x:Name=&amp;quot;PropertyToggle&amp;quot;&lt;br /&gt;
    CheckSymbol=&amp;quot;&amp;amp;#x1F526;&amp;quot;&lt;br /&gt;
    IsVisible=&amp;quot;{Binding AppStatus.IsFlashSupported}&amp;quot;&lt;br /&gt;
    IsChecked=&amp;quot;{Binding AppStatus.SwitchFlashLight, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKIconToggleButton}&amp;quot;&lt;br /&gt;
    SymbolSize=&amp;quot;20&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger&lt;br /&gt;
            Binding=&amp;quot;{Binding AppStatus.IsFlashEnabled}&amp;quot;&lt;br /&gt;
            TargetType=&amp;quot;controls:CheckBox&amp;quot;&lt;br /&gt;
            Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Background&amp;quot; Value=&amp;quot;{StaticResource UBIKAccentColor}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
   &amp;lt;/controls:CheckBox.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:CheckBox&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Performance ==&lt;br /&gt;
To get a good performance in the app UI when using your Xaml customizings, it is recommended to try the following.&lt;br /&gt;
* Always keep your UI structure simple. Choose the most efficient layouts for the scenarios and avoid unnecessary UI elements. Please refer to [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#choose-the-correct-layout &amp;quot;choose the correct layout&amp;quot;] and [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/deploy-test/performance#reduce-the-visual-tree-size &amp;quot;reduce the visual tree size&amp;quot;];&lt;br /&gt;
* Turn on [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-compression layout compression] on wrapping elements that don't have any visual parameters set (reasons stated in the linked documentation).&lt;br /&gt;
{{Hint|There is a default &amp;quot;HeadlessLayout&amp;quot; style available in the app you can use on elements such as Grids, StackLayouts, ContentViews, etc. It turns on [[Xamarin_XAML#Layout_compression_examples|layout compression]] on the applied elements in Xamarin.Android (since we find it not worth the effort in Xamarin.iOS).}}&lt;br /&gt;
{{Attention|If possible, one should always favor designing the UI with less wrapping elements over turning on layout compression on unnecessary ones.}}&lt;br /&gt;
&lt;br /&gt;
=== General performance tips ===&lt;br /&gt;
* Reduce number of views per page&lt;br /&gt;
* Don’t bind things if they could be set static easily&lt;br /&gt;
* If you do not change the default, don’t set it explicit. For example, [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.StackLayout.Orientation?view=xamarin-forms Orientation of StackLayout] is “Vertical” by default. No need to set it manually if you don’t want to change it.&lt;br /&gt;
* Transparency is expensive.&lt;br /&gt;
* Do not put ListViews into ScrollViews.&lt;br /&gt;
* To stack elements, create a grid and add them to the same cell one after another. It’s cheaper than RelativeLayout.&lt;br /&gt;
* Use Margins instead of Paddings.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Layouts ===&lt;br /&gt;
* Choose correct Layout, e.g. no need to add a StackLayout if it only has 1 child.&lt;br /&gt;
* [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/layout-options LayoutOptions].Fill or .FillAndExpand are best choice in most cases. And they are already default, so no need to set.&lt;br /&gt;
* Autosize of rows and columns in grids should used as few as possible.&lt;br /&gt;
* RelativeLayout is very expensive. Try to avoid.&lt;br /&gt;
* In StackLayout, make sure there is only 1 LayoutOptions Expand.&lt;br /&gt;
&lt;br /&gt;
=== Labels ===&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/text/label#formatted-text FormattedText] instead of multiple labels.&lt;br /&gt;
* Use [https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.linebreakmode?view=xamarin-forms Linebreakmode] NoWrap (which is already the default).&lt;br /&gt;
* Avoid [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Label.VerticalTextAlignment?view=xamarin-forms VerticalTextAlignment]. Anyway, if needed, use VerticalTextAligment instead of &lt;br /&gt;
VerticalOptions.&lt;br /&gt;
* Use the &amp;quot;TextTransform&amp;quot; attribute to convert the value of the &amp;quot;Text&amp;quot; attribute to either uppercase or lowercase.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label&lt;br /&gt;
      TextTransform=&amp;quot;Uppercase&amp;quot;&lt;br /&gt;
      Text=&amp;quot;{Binding Properties.AllItems[DESCR].DisplayValue}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Images ===&lt;br /&gt;
* Provide images in optimized width and size. Provide multiple resolutions for different usage.&lt;br /&gt;
* Set [https://docs.microsoft.com/en-us/dotnet/api/Xamarin.Forms.Image.IsOpaque?view=xamarin-forms IsOpaque] to true if image is opaque.&lt;br /&gt;
&lt;br /&gt;
=== Layout compression examples ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource ChangedSymbol}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The code above removes one wrapping element added automatically by the ContentView and demonstrates a good reason to use layout compression because it can not be avoided otherwise.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid Margin=&amp;quot;2&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Margin=&amp;quot;5&amp;quot; Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
This example, on the other hand, demonstrates a bad usage of layout compression because it can be easily achieved by better designs such as using only the Label with a merged margin.&lt;br /&gt;
&lt;br /&gt;
Sometimes the content inside a compressed layout appears on a wrong z-index level. For eample:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;BoxView CornerRadius=&amp;quot;14&amp;quot; HeightRequest=&amp;quot;28&amp;quot; WidthRequest=&amp;quot;28&amp;quot; Color=&amp;quot;Red&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;ContentView ControlTemplate=&amp;quot;{DynamicResource Badge}&amp;quot; Style=&amp;quot;{DynamicResource HeadlessLayout}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Label Text=&amp;quot;{Binding Title}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView &amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
According to the order of the BoxView and the Label, the latter should appear on top of the former (later ones have higher z-index levels). However, this can be disturbed by layout compression, causing the exact opposite.&lt;br /&gt;
In this case, you can add a &amp;lt;code&amp;gt;xmlns:android=&amp;quot;clr-namespace:Xamarin.Forms.PlatformConfiguration.AndroidSpecific;assembly=Xamarin.Forms.Core&amp;quot;&amp;lt;/code&amp;gt; namespace to your Xaml file and manually elevate the Label by specifying &amp;lt;code&amp;gt;android:VisualElement.Elevation=&amp;quot;X&amp;quot;&amp;lt;/code&amp;gt; on it accordingly (X is the delta of the z-index level you want).&lt;br /&gt;
&lt;br /&gt;
=== SfListViewExt ===&lt;br /&gt;
For performance reasons, we created an extended version of the Syncfusion SfListView control and it should be used for all lists in customizings. You need to add a namespace like &amp;lt;code&amp;gt;xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;lt;/code&amp;gt; to your Xaml file and use it like &amp;lt;code&amp;gt;&amp;lt;controls:SfListViewExt ... /&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
{{Hint|Technically speaking, SfListViewExt informs item view models when their corresponding item views appear on / disappear from the screen. This way, view models can skip a lot of unnecessary work (on the UI) when their views are not visible. '''If SfListView is used instead, the item views will not reflect content changes until the page is reloaded/refreshed.'''}}&lt;br /&gt;
&lt;br /&gt;
It is possible to configure the ListView, that the ScrollPosition is remembered when navigating away from the page, to do so, the property RembemberScrollPosition needs to be set to true. If unset, the value defaults to false and the scroll positions are not remembered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt RememberScrollPosition=&amp;quot;True&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When using multiple Lists on one page (e.g. in a TabbedView), it is necessary to set the AutomationId property uniquely for each list on the page, to support the remembering of the ScrollPosition.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delay and LazyLoading ===&lt;br /&gt;
{{Attention|Although both properties can be set in XAML on the two controls, this should not be done. When both the LazyLoading and Delay properties are set, the Delay property is ignored in the code-behind, as otherwise it could lead to unexpected behavior and, in the worst case, result in performance degradation.}}&lt;br /&gt;
&lt;br /&gt;
==== Delay in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
More complex UIs create a delay in rendering which leads to a feeling of &amp;quot;unresponsiveness&amp;quot; when navigating through the client. This is because the app loads and displays everything at once, leading to a larger delay between triggering navigation and completion of page loading.&lt;br /&gt;
 &lt;br /&gt;
While the complexity of the UI directly affects the time taken to render it, the experience of responsiveness can be somewhat improved by actually adding a delay between the loading of the content page, and actual data content (properties, children, etc). By not loading both at once, resources are freed up in the app, leading to a quicker loading of the basic page. The content then loads in at its normal speed.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
Starting from version 5.1, a small delay was introduced in the content heavy pages (child page, document page and query page). However, additional delays can also be applied to the custom UI at will, using a new property added to two existing controls used to insert UI templates: UBIKContentView and ContentControl. You can specify a delay (in milliseconds) on both controls so that the content of them is loaded after that amount of time. Examples are shown below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:ContentControl &lt;br /&gt;
    Delay=&amp;quot;50&amp;quot; &lt;br /&gt;
    ContentTemplate=&amp;quot;{Binding [UBIKNavigationBar], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hint|The delay won't have any effect if you specify the Content of the UBIKContentView control instead of its Converter, because the Content is immediately laid out by the XAML framework that way. If you don't need a converter to determine the actual template name dynamically, you can still use the TemplateConverter and specify the template name like the following so that the delay applies.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay applies ✅&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; ConverterParameter=&amp;quot;UBIKChildArea&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Delay doesn't apply ❌&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView Delay=&amp;quot;50&amp;quot; Content=&amp;quot;{Binding [UBIKChildArea], Source={x:Static services:TemplateService.Instance}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Lazy Loading in UBIKContentView and ContentControl {{Version/MobileSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
To further improve performance, it is now possible to apply LazyLoading to UBIKContentView and ContentControl. &lt;br /&gt;
&lt;br /&gt;
When a ContentTemplate is assigned to either of these controls and the LazyLoading property is set to true, the content is only loaded when it is explicitly requested. The difference between this and simply controlling the IsVisible condition is that in the latter, resources are still consumed in constructing the UI element, even though it is not shown. Note that Lazy loading requires a trigger to determine when the content should be loaded, and the biggest benefit is experienced when complex elements, especially those hosting a ListView or some kind of object/property collection, are lazy-loaded. &lt;br /&gt;
&lt;br /&gt;
UBIKTabView is optimized to make use of the LazyLoading attribute when it is applied to tab content. Additionally, usage outside of UBIKTabView is possible, as the loading can be triggered as a behavior attached to any other control, such as a button with an IsClicked behavior handler. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''UBIKTabView with LazyLoading'''&lt;br /&gt;
&lt;br /&gt;
When used in combination with UBIKTabView (by including the LazyLoading=True attribute on any UBIKContentView or ContentControl content of a tab item, as is now standard {{Version/MobileSince|5.1}}), only the content of the selected tab is rendered (by default, the first tab). The content of non-selected tabs is not. When switching tabs, UBIKTabView takes care of triggering the rendering of the content for the newly selected tab. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! UBIKContentView&lt;br /&gt;
! ContentControl&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView &lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot; &lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKPropertyArea&amp;quot; &lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
||&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem&amp;gt;&lt;br /&gt;
    &amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
        &amp;lt;controls:ContentControl &lt;br /&gt;
            ContentTemplate=&amp;quot;{DynamicResource MyTemplate}&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
 &amp;lt;/tabView:SfTabItem&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Using another control as a trigger for lazy loading'''&lt;br /&gt;
&lt;br /&gt;
Other controls (e.g., Button, CheckBox, etc.) can also serve as triggers for lazy loading. The benefit of this is that LazyLoading can still be applied to a complex UBIKContentView or ContentControl that is not hosted within a UBIKTabView. &lt;br /&gt;
&lt;br /&gt;
And example of a usecase is a togglebutton that reveals a section of content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
    &amp;lt;Grid RowDefinitions=&amp;quot;*,50,*&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;controls:UBIKContentView x:Name=&amp;quot;ChildContainer&amp;quot; Converter=&amp;quot;{StaticResource ChildAreaTemplateConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;Button&lt;br /&gt;
            x:Name=&amp;quot;LoadDocuments&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;1&amp;quot;&lt;br /&gt;
            HeightRequest=&amp;quot;50&amp;quot;&lt;br /&gt;
            HorizontalOptions=&amp;quot;Center&amp;quot;&lt;br /&gt;
            Text=&amp;quot;LazyLoadDocuments&amp;quot;&lt;br /&gt;
            WidthRequest=&amp;quot;200&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;Clicked&amp;quot;&amp;gt;&lt;br /&gt;
                    &amp;lt;behaviors:InvokeMethodAction MethodName=&amp;quot;TriggerLazyLoad&amp;quot; TargetObject=&amp;quot;{Binding Source={x:Reference DocumentsAreaLoader}}&amp;quot; /&amp;gt;&lt;br /&gt;
                &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
            &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;/Button&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;controls:UBIKContentView&lt;br /&gt;
            x:Name=&amp;quot;DocumentsAreaLoader&amp;quot;&lt;br /&gt;
            Grid.Row=&amp;quot;2&amp;quot;&lt;br /&gt;
            Converter=&amp;quot;{StaticResource TemplateConverter}&amp;quot;&lt;br /&gt;
            ConverterParameter=&amp;quot;UBIKDocumentArea&amp;quot;&lt;br /&gt;
            LazyLoading=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/tabView:SfTabItem.Content&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Known issues =&lt;br /&gt;
&lt;br /&gt;
=== Headlesslayout style in custom UBIKThemes causing problems ===&lt;br /&gt;
&lt;br /&gt;
In our default '''UBIKThemes''', we are currently using this style for a headless layout:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;HeadlessLayout&amp;quot; TargetType=&amp;quot;Layout&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;CompressedLayout.IsHeadless&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;Setter.Value&amp;gt;&lt;br /&gt;
            &amp;lt;OnPlatform&lt;br /&gt;
                x:TypeArguments=&amp;quot;x:Boolean&amp;quot;&lt;br /&gt;
                Android=&amp;quot;True&amp;quot;&lt;br /&gt;
                WinPhone=&amp;quot;False&amp;quot;&lt;br /&gt;
                iOS=&amp;quot;False&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/Setter.Value&amp;gt;&lt;br /&gt;
    &amp;lt;/Setter&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
This style is used for better UI performance on Android.&lt;br /&gt;
Using this style in a '''custom UBIKThemes''' could cause an exception &amp;amp; an app crash, or some objects to disappear.&lt;br /&gt;
The best case would be to '''not''' include it in the custom themes file, as it's unnecessary if you don't want to make any changes here.&lt;br /&gt;
&lt;br /&gt;
'''This issue is only known on Android tablet devices.'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DataTrigger Issues ===&lt;br /&gt;
==== Conflicting Triggers ====&lt;br /&gt;
DataTriggers in Mobile function better than the equivalent DataTriggerBehavior in UWP as they automatically handle the opposite case when a Boolean attribute value is set. This means that if a boolean DataTrigger is set, such as IsVisible=True, the False visibility will automatically be set if the Binding/Value condition is not met.&lt;br /&gt;
&lt;br /&gt;
However, this means that stacking multiple DataTriggers on the same attribute can lead to unexpected results. For this reason, it is recommended to use as few DataTriggers as possible. &lt;br /&gt;
* Avoid setting the same attribute more than once; do not set the same value as a default attribute and in the DataTrigger (ControlTemplate in the below example).&lt;br /&gt;
* Ideally, use only DataTriggers without a default ControlTemplate. This ensures that content is created only after the trigger evaluation is complete. If a default ControlTemplate is set, it is always loaded immediately, even if another template is applied right after.&lt;br /&gt;
* It is acceptable, but not recommended, to combine a single DataTrigger with an opposite default value, but only if the default value is different from all values set in triggers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Don't Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Instead Do&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource SelListTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Acceptable, but not recommended&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;editorValueContainer&amp;quot; ControlTemplate=&amp;quot;{StaticResource SelListTemplate}&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;ContentView.Triggers&amp;gt;&lt;br /&gt;
    &amp;lt;DataTrigger Binding=&amp;quot;{Binding Source={x:Reference editorValueContainer}, Path=BindingContext.PropertyViewModel.ShowComboBox}&amp;quot; TargetType=&amp;quot;ContentView&amp;quot; Value=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;Setter Property=&amp;quot;ControlTemplate&amp;quot; Value=&amp;quot;{StaticResource TextTemplate}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
  &amp;lt;/ContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== DataTrigger to set Footer Properties in a ListView ====&lt;br /&gt;
&lt;br /&gt;
When using a DataTrigger to set the properties of a footer for a ListView, the sequence of the properties inside the DataTrigger might matter in some cases.&lt;br /&gt;
It seems to occur since Version 4.4 due to a Syncfusion update and could lead to the page not being rendered properly and appearing empty.&lt;br /&gt;
&lt;br /&gt;
If you encounter such an issue, please workaround by adding the IsStickyFooter Property Setter on top inside the DataTrigger.&lt;br /&gt;
Also, new customizings should consider this workaround as a preventive action.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK IN CERTAIN CASES --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;controls:SfListViewExt ...&amp;gt;&lt;br /&gt;
	&amp;lt;controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
		&amp;lt;DataTrigger TargetType=&amp;quot;controls:SfListViewExt&amp;quot; Binding=&amp;quot;{Binding Title}&amp;quot; Value=&amp;quot;Administration&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;IsStickyFooter&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterTemplate&amp;quot; Value=&amp;quot;{DynamicResource AddLoginFooter}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;Setter Property=&amp;quot;FooterSize&amp;quot; Value=&amp;quot;64&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
	&amp;lt;/controls:SfListViewExt.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Incorrect glyphs may be shown on buttons ===&lt;br /&gt;
&lt;br /&gt;
When using glyphs on buttons in Mobile, sometimes a different glyph than the expected one will show up when viewing the app on Android.&lt;br /&gt;
They only seem to appear incorrectly when used as the Text property of the button (with FontFamily set to UBIKSymbols, such as the UBIKIconButton style.)&lt;br /&gt;
&lt;br /&gt;
If you encounter this issue please workaround by supplying the icon through the FontImageSource property of the button.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding BulkOperation.InvokeOnItemsCommand}&amp;quot;&amp;gt;&lt;br /&gt;
     &amp;lt;Button.ImageSource&amp;gt;&lt;br /&gt;
          &amp;lt;FontImageSource &lt;br /&gt;
               FontFamily=&amp;quot;{DynamicResource UBIKSymbols}&amp;quot;&lt;br /&gt;
               Glyph=&amp;quot;{x:Static resources:UBIKIcons.MobileDelete}&amp;quot;&lt;br /&gt;
               Color=&amp;quot;{DynamicResource UBIKDarkThemeColor}&amp;quot;&lt;br /&gt;
               Size=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.ImageSource&amp;gt;&lt;br /&gt;
     &amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
          &amp;lt;classes:KeyValueList&amp;gt;&lt;br /&gt;
                    &amp;lt;classes:KeyValueParameter Key=&amp;quot;Command&amp;quot; Value=&amp;quot;DiscardContentCommand&amp;quot; /&amp;gt;&lt;br /&gt;
          &amp;lt;/classes:KeyValueList&amp;gt;&lt;br /&gt;
     &amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Buttons and gesture recognizers ===&lt;br /&gt;
In Mobile XAML, you can use gesture recognizers on many UI elements such as a Grid to enable the latter to interact with user inputs.&lt;br /&gt;
&lt;br /&gt;
However, we've already made quite a lot of experience that gesture recognizers do not always work on Android and iOS when used on a Button control.&lt;br /&gt;
For example, the following Button won't properly invoke the command on said platforms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS DOESN'T WORK!!! --&amp;gt;&lt;br /&gt;
&amp;lt;Button ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.GestureRecognizers&amp;gt;&lt;br /&gt;
        &amp;lt;TapGestureRecognizer Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.GestureRecognizers&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Therefore, you should always seek alternatives for Buttons.&lt;br /&gt;
'''If only one command is needed''', use the standard Command property on the Button, e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; .../&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Or if multiple commands are needed, use Behaviors '''instead''', e.g.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS ALSO WORKS --&amp;gt;&lt;br /&gt;
&amp;lt;Button xmlns:behaviors=&amp;quot;clr-namespace:UBIK.CPL.Behaviors;assembly=UBIK.CPL&amp;quot; ...&amp;gt;&lt;br /&gt;
    &amp;lt;Button.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding ReplicateAsDataCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;behaviors:EventToCommandBehavior Command=&amp;quot;{Binding NavigateBackCommand}&amp;quot; EventName=&amp;quot;Clicked&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.Behaviors&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== No dynamic reloading of Document Viewer ===&lt;br /&gt;
[[File:PDFViewerFixWiki.JPG]]&lt;br /&gt;
&lt;br /&gt;
In a customizing that combines a single-selection list of documents with some kind of viewer (especially UBIKDocumentContentArea), it is generally the case that switching the document causes the document viewer to then appear blank. The technical reason is that the PDFViewer used in the UBIKDocumentContentArea is not reloaded once the document content is reloaded. &lt;br /&gt;
&lt;br /&gt;
An easy fix is to apply a DataTrigger that unloads the ContentView when the document content is null, as the ContentView is forced to rerender itself when the trigger condition is no longer met.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- Document Viewer --&amp;gt;&lt;br /&gt;
&amp;lt;controls:UBIKContentView &lt;br /&gt;
    x:Name=&amp;quot;DoucmentViewer&amp;quot; &lt;br /&gt;
    BindingContext=&amp;quot;{Binding SelectedItem, Source={x:Reference DocumentList}}&amp;quot;&lt;br /&gt;
    Content=&amp;quot;{Binding [UBIKDocumentContentArea], Source={x:Static services:TemplateService.Instance}}&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
        &amp;lt;DataTrigger TargetType=&amp;quot;controls:UBIKContentView&amp;quot; Binding=&amp;quot;{Binding SelectedItem.DocumentViewModel.DocumentContent, Source={x:Reference DocumentList}, Converter={StaticResource NullToBool}}&amp;quot; Value=&amp;quot;True&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;Setter Property=&amp;quot;Content&amp;quot; Value=&amp;quot;{x:Null}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/DataTrigger&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:UBIKContentView.Triggers&amp;gt;&lt;br /&gt;
&amp;lt;/controls:UBIKContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Issues with SfPullToRefresh in Mobile client {{Version/MobileSince|5.0}} ===&lt;br /&gt;
Due to a third-party issue, problems may occur on Mobile Android when using the SfPullToRefresh control in combination with the SfListViewExt. This can result in e.g. navigation or task interaction sometimes requiring multiple clicks.&lt;br /&gt;
In general, and due to more issues, it's not recommended to use the SfPullToRefresh control.&lt;br /&gt;
In our Mobile standard client, the PullToRefresh control has been replaced by a Refresh button in the Context Menu.&lt;br /&gt;
If you still decide to use SfPullToRefresh, there are a few points to consider:&lt;br /&gt;
&lt;br /&gt;
==== Avoid multiple SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue that causes the app to freeze, avoid placing more than one SfPullToRefresh controls as siblings in a xaml hierarchy. If switching between contents in a SfPullToRefresh control is necessary use separate DataTemplates for the contents and use e.g. a DataTrigger to set one of them as the ControlTemplate of a ContentControl inside the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_multiple_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
==== Avoid using SyncFusion ListViews directly in SfPullToRefresh controls ====&lt;br /&gt;
To prevent an issue on some Android devices that can cause some items in a SfListViewExt to be rendered incorrectly or not at all after triggering a PullToRefresh, avoid placing a SfListViewExt directly in a SfPullToRefresh control. Instead, wrap the ListView in a DataTemplate and use it in a ContentControl as a child of the SfPullToRefresh control. For an example, refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui#Avoid_using_SyncFusion_ListViews_directly_in_SfPullToRefresh_controls|this link]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= UBIK Go (Maui) Customizing Guide {{Version/MobileSince|5.1}} =&lt;br /&gt;
The change to Maui was taken as an opportunity both to visually update the client's default UI, and to add some quality of life changes aiming to reduce the amount of customizing needed.&lt;br /&gt;
&lt;br /&gt;
This section describes the standard UI and how to more easily customize it.&lt;br /&gt;
&lt;br /&gt;
For differences between Xamarin and Maui, please refer to the [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] article.&lt;br /&gt;
&lt;br /&gt;
== XAML Changes And Improvements ==&lt;br /&gt;
=== Styles and Resources ===&lt;br /&gt;
* Various color elements were renamed for neutrality. This will help clarify the purpose of color themes, and make it easier to keep track of in customizings. The old versions are still available but moved to the Obsolete section of UBIKThemes. &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKDarkTextColor --&amp;gt; UBIKRegularTextColor&lt;br /&gt;
UBIKDarkThemeColor --&amp;gt; UBIKMainThemeColor&lt;br /&gt;
UBIKLightTextColor --&amp;gt; UBIKMainThemeContrastColor&lt;br /&gt;
UBIKLightThemeColor --&amp;gt; UBIKBasePageColor&lt;br /&gt;
UBIKSubtleTextColor --&amp;gt; UBIKMediumTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Furthermore, effort was made to create 'contrast pairs' throughout the client; for example, UBIKMainThemeContrastColor is defined primarily for texts layered on elements of UBIKMainThemeColor (such as the title bar and text). &lt;br /&gt;
** The intention here is that this pair can be safely customized with no surprises, that cannot be guaranteed when using non-paired resource. For example, UBIKMainThemeContrastColor  and UBIKBasePageColor are both white in the default customizing, but if UBIKBasePageColor that were to be layered over UBIKMainThemeColor, it would result in a black-on-black issue in a dark theme customizing. &lt;br /&gt;
** The 'pairs' are; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
UBIKMainThemeColor x UBIKMainThemeContrastColor&lt;br /&gt;
UBIKBasePageColor x UBIKRegularTextColor&lt;br /&gt;
UBIKButtonColor x UBIKButtonTextColor &lt;br /&gt;
UBIKButtonToggledColor x UBIKButtonToggledTextColor &lt;br /&gt;
UBIKPDFBaseColor x UBIKPDFTextColor&lt;br /&gt;
UBIKPDFSelectedToolColor x UBIKPDFSelectedToolTextColor&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* An effort was also made to avoid hardcoding numeric values on the client. Reusable resources were introduced instead; &amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonIconSize&amp;quot;&amp;gt;20&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonPanelSize&amp;quot;&amp;gt;56&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonSize&amp;quot;&amp;gt;44&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKListItemSize&amp;quot;&amp;gt;80&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKTileItemSize&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;120&amp;quot; Phone=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKCaptionTextSize&amp;quot;&amp;gt;14&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKButtonTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKBodyTextSize&amp;quot;&amp;gt;16&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKTitleTextSize&amp;quot;&amp;gt;18&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;x:Double x:Key=&amp;quot;UBIKProgressBarHeight&amp;quot;&amp;gt;4&amp;lt;/x:Double&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptivePadding&amp;quot; x:TypeArguments=&amp;quot;Thickness&amp;quot; Default=&amp;quot;8,0&amp;quot; Phone=&amp;quot;4,0&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;OnIdiom x:Key=&amp;quot;UBIKAdaptiveSpacing&amp;quot; x:TypeArguments=&amp;quot;x:Double&amp;quot; Default=&amp;quot;16&amp;quot; Phone=&amp;quot;8&amp;quot; /&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
* Regarding corporate colors, there are now additional resources to customize, aside from UBIKAccentColor;&lt;br /&gt;
** UBIKHighlightColor is a secondary accent color used for highlighting (eg. Multiselect mode or edited Property). It is also combined with UBIKAccentColor to form a gradient on the Authentication area. {{Version/MobileSince|5.1.0.0}} A new UBIKGradientColor has been added to the resources, which is now replacing the UBIKHighlightColor used for the gradient on the Authentication area. Additionally, some transparency has been added to the UBIKHighlightColor.&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
* As in WinX {{Version/WinXSince|4.0}}, the various possible object status indicators were exported to a template called '''StatusIndicators''' located in UBIKThemes. These are now displayed at the top right of the item template, with a semi-opaque underlay in case the indicators appear over Title/SubTitle text.&lt;br /&gt;
* '''SfTextInputLayout''' was introduced and is used in various locations (Authentication, and properties).&lt;br /&gt;
* Default values for size, font, color, etc, were applied to various controls (Picker, Entry etc) for consistency.&lt;br /&gt;
* New '''SfListView''' styles were introduced and the originals moved to the Obsolete section.&lt;br /&gt;
** The listview now has a background color (UBIKMediumElementColor) and child item templates are now responsible for providing their own background color (UBIKBasePageColor that is applied to the Grid style UBIKItemBase). &lt;br /&gt;
*** The intention is to provide visual distinction from actual list items and empty list 'space'.&lt;br /&gt;
*** However, this will interfere with lists that rely on the SelectionBackground to highlight selection. This is solved in various ways throughout the UI, such as the SelectedIndicator used in UBIKChildItem, or the seperate SelectedItem and SelectedItemTemplate templates used in UBIKEditGuid.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
=== Adaptivity ===&lt;br /&gt;
- tbd.&lt;br /&gt;
&lt;br /&gt;
=== Layout and Functionality ===&lt;br /&gt;
* '''UBIKNavigationBar''' was introduced as a templatable alternative to the hardcoded context menu (accessed by the '...' button in the top right of the content area) and is fully customizable.&lt;br /&gt;
* Shadowed panels were introduced in place of floating buttons in the content tabs (Children, Properties). For consistency, both are located at the top of their respective tab content.&lt;br /&gt;
* '''UBIKChildItem''' was visually simplified. It now displays a simple icon, the Title (and MRO progress, if any) and Subtitle, and StatusIndicators in the top right. The progressbar is now displayed across the bottom of the item.&lt;br /&gt;
* '''UBIKTaskItem''' was completely redesigned. &lt;br /&gt;
** Aside from the StatusIndicators that appear in the top right uniformly on any context object, MRO-related ones (Task status (Finished, NA, or Not Necessary, Group Limit and Size, Previous Value, and Tech Indicator) appear on the top left contained in an SfChipGroup. &lt;br /&gt;
** The main area of the task item is previously split between Title and task-related input. On smaller devices or in editing regardless of screen size, the input area sizes becomes larger.&lt;br /&gt;
** The task related input now looks visually distinct with and without a value. UBIKButton(Text)Color is used for 'new' tasks, while UBIKButtonToggled(Text)Color is used for the 'value filled' state.&lt;br /&gt;
&lt;br /&gt;
=== File Structure ===&lt;br /&gt;
* '''UBIKRootItem''' (formerly UBIKMainItem) was introduced simply so that the Title, Area, and Item are organized together within the default and customizing folders. For compatibility, UBIKMainItem still exists in the default folder, however, be aware that the listview in UBIKRootArea now requests UBIKRootItem as the ItemTemplate by default.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;br /&gt;
&lt;br /&gt;
== Customizing Guides ==&lt;br /&gt;
=== Dark Theme ===&lt;br /&gt;
While UBIK Go does not include a Dark Theme by default, a lot of effort was invested in optimizing the color resources used throughout the app, so that a dark theme can be quickly customized. Furthermore, below is a list of recommended changes that result in a functional dark theme.&lt;br /&gt;
&lt;br /&gt;
'''In UBIKThemes:'''&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;lt;x:String x:Key=&amp;quot;TextFontFamily&amp;quot;&amp;gt;InterL&amp;lt;/x:String&amp;gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the value for TextFontFamily with &amp;quot;InterL&amp;quot;; It is recommended to use a thinner font as white on black looks bolder than the inverse.&lt;br /&gt;
A 'Light' version of the default font font was added and can be accessed using the tag InterL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKRegularTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMediumTextColor&amp;quot;&amp;gt;#A3ffffff&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBasePageColor&amp;quot;&amp;gt;#3a3a3c&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKMainThemeColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKBorderColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKElementColor&amp;quot;&amp;gt;#2c2c2e&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKLightElementColor&amp;quot;&amp;gt;#222124&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKFinishedElementColor&amp;quot;&amp;gt;#2a2a2b&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKOverlayElementColor&amp;quot;&amp;gt;#3D000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKImageOverlayColor&amp;quot;&amp;gt;#A3000000&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt; &lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKButtonToggledTextColor&amp;quot;&amp;gt;Black&amp;lt;/Color&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFSelectedToolTextColor&amp;quot;&amp;gt;#292929&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFTextColor&amp;quot;&amp;gt;White&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKPDFBaseColor&amp;quot;&amp;gt;#181719&amp;lt;/Color&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Replace the above color resources (or similar).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Shadow&lt;br /&gt;
        x:Key=&amp;quot;UBIKPanelShadow&amp;quot;&lt;br /&gt;
        Brush=&amp;quot;Black&amp;quot; ... /&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Change the value for the attribute Brush to &amp;quot;Black&amp;quot; to darken the panel shadows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Color x:Key=&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;&amp;gt;#636365&amp;lt;/Color&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;Style x:Key=&amp;quot;UBIKProgressBar&amp;quot; TargetType=&amp;quot;controls:ProgressBar&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Setter Property=&amp;quot;StatusColor&amp;quot; Value=&amp;quot;{Binding ClassificationHandler.StatusColor, Converter={StaticResource IntToColor}, ConverterParameter={StaticResource UBIKProgressBarUndefinedStatuscolor}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Style&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The light theme uses UBIKElementColor for the progress bar color when none is defined on the server. However, this does not invert well in a dark theme. Therefore a new color resource should be introduced (&amp;quot;UBIKProgressBarUndefinedStatuscolor&amp;quot;) and used in the ConverterParameter of the IntToColor converter, which does not accept a color hex code directly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''In UBIKSplashArea:'''&lt;br /&gt;
&lt;br /&gt;
Follow the instructions embedded within the file to replace the splash image with a custom logo. Alternatively, simply adapt the Source attribute of the Image control to &amp;quot;splashlogoinverse.png&amp;quot; to apply an inversion of the UBIK Go logo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Increased FontSize ===&lt;br /&gt;
tbd.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Xamarin XAML]]&lt;br /&gt;
[[Category:Mobile|Mobile XAML]]&lt;br /&gt;
[[Category:Pages with broken file links|Xamarin XAML]]&lt;br /&gt;
[[Category:Styling|Xamarin XAML]]&lt;br /&gt;
[[Category:XAML|Xamarin XAML]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29772</id>
		<title>Version 5.1 (Mobile)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29772"/>
				<updated>2026-04-28T12:54:18Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|Existing pre 5.0 XAMLs are not compatible with UBIK Mobile client 5.1. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|UBIK 5 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|The minimum supported OS versions are:&lt;br /&gt;
* Android 9;&lt;br /&gt;
* iOS 12.}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Preview}}: Available through Google Play Store's [https://play.google.com/store/apps/details?id=com.augmensys.ubik.go invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/Kmb1HG9E invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Preview}}: Available through Apple App Store's [https://testflight.apple.com/join/yHRnbYbt invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|Windows: Store Preview}}: The mobile Windows client is not an official product and is only distributed as test versions upon request and/or in our [https://release.augmensys.com/download/modules/client/mobile/ release portal].&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* UBIK Client now supports [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Tasks]] configured with an [[Active_List_Client|Active List]].&lt;br /&gt;
* Added  [[MRO_Objects_(Client)#Numeric_Task|Numeric Tasks]] to record numeric values that are checked against an acceptable value range.&lt;br /&gt;
* UBIK now supports [[Traits]] which are more flexible when it comes to server side configuration and maintenance.&lt;br /&gt;
* Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
* The system flashlight can now also be enabled or disabled via XAML customization. For detailed information, see [[Mobile XAML#Flashlight|Flashlight]]&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* [[MRO_Objects_(Client)#Signature_Task|MRO Signature Tasks]] have been introduced, which automatically displays the signee as well as the validation timestamp after the task has been signed.&lt;br /&gt;
* Fixed an issue where changes in property editing were not discarded when using the default Back button.&lt;br /&gt;
* Fixed an issue where the application crashed on Windows when navigating back from the VideoPlayer.&lt;br /&gt;
* Icon set Addition 8: Added Show/Hide, AI, Info, and various Procedure icons.&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where MRO task items displayed an incorrect DataTemplate after scrolling within a list.&lt;br /&gt;
* Fixed an issue where the client could fail at large file uploads (or even crash) due to device running out of memory.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems. The standard UI is not yet redesigned to show multi-line texts, though. But you can do so in customizing if necessary.&lt;br /&gt;
* Fixed the UI of some templates that weren't displayed correctly in Multi Select Mode.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== 5.1.30 2026-03-02 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.29 on 2026-02-26 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue where the POI button was only visible under certain condition (ShowUnreleasedFeatures in the profile is set to true).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.28 on 2026-02-10 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* The following features which existed in pre 5.0 versions are now available again in 5.1.&lt;br /&gt;
** [[Map_View|Map view]].&lt;br /&gt;
** [[POI_View_(Mobile)|POI view]]. (Aruco and OCR are not yet supported)&lt;br /&gt;
** Location service.&lt;br /&gt;
** [[Native_Push_(Client)|Native push]].&lt;br /&gt;
** [[Charts]].&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Complete UI overhaul introduces a cleaner, more modern and adaptive user interface with various quality of life improvements.&lt;br /&gt;
* UBIKTabView supports both dynamic and static items in combination with lazy loading.&lt;br /&gt;
* Files in the app's data folder can now be opened or deleted directly in the developer settings.&lt;br /&gt;
* Introduced a fully resource-driven UI theming system enabling fast, safe customization (dark mode, resizing, and consistent styling) by adapting a small set of centralized resources.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* Fixed an issue where remembered scroll positions were lost when the ItemsSource property of an SfListViewExt changed (e.g., Properties.ShowAllProperties).&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed issue that caused app to be stuck on splash screen after resuming from background.&lt;br /&gt;
* Fixed an issue where StatusColor was not shown in the UI for objects that didn't additionally have a Progress.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Fixed an issue that caused content of the custom ContentControl to not be rendered sometimes.&lt;br /&gt;
* (Android) Fixed an issue in the WebView where some links could not be opened.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the deletion of some objects was not reflected in the UI until refresh.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true. In Mobile, deleting the last annotation does not correctly update the editor's internal edit state. As a result, the Save button may remain visible even though no edits exist.&lt;br /&gt;
* When changing the device orientation during attaching a photo on iOS, the app gets stuck. This is an issue Microsoft confirmed in .NET9 and will fix in .NET10.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
* The periodic execution of background pushes is not guaranteed on iOS (the native push feature doesn't have this issue).&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* It is currently not possible to select which camera to use for AR views (e.g. scan page) on Windows.&lt;br /&gt;
* SfPullToRefresh was removed due to [[Mobile_XAML#Issues_with_SfPullToRefresh_in_Mobile_client|existing issues]], and replaced with a Refresh option in the Context menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
* Due to the change of the underlying XAML technology, the existing XAMLs for the old mobile clients (pre 5.0) are no longer compatible. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.&lt;br /&gt;
* There are some XAML changes necessary when using the new [[Active_List_Client|Active List]] feature, or when using the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]]. These XAML changes are explained [[Active_List_Client#XAML|here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(WinX)&amp;diff=29758</id>
		<title>Version 5.1 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(WinX)&amp;diff=29758"/>
				<updated>2026-04-28T07:46:03Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* 5.1.?? on 2026-??-?? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|This version requires [https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1809_(October_2018_Update) Windows 10 build 17763] or higher}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Store}}: Publicly available in Microsoft Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Store Beta}} / {{key press|Store Preview}}: Publicly available in Microsoft Store as beta or preview versions to those whose account email is participating in our beta or preview test. To join, please send an email to testing@augmensys.com and provide an email address to add to the list as well as the information which test you want to join. Alternatively you can contact the Augmensys staff and submit your chosen email address.&lt;br /&gt;
&lt;br /&gt;
Example: Please add my email account example@example.com to the '''Beta''' test group for the '''WinX''' client.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? on 2026-??-?? ===&lt;br /&gt;
* Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* Provided a visual difference between suggested and actual values in DateTime and Geo property direct edit fields via a [[XAML#Custom_VisualState_Trigger|Custom VisualState Trigger]].&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems.&lt;br /&gt;
* UBIK Client now supports [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Tasks]] configured with an [[Active_List_Client|Active List]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (WinX)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 5.1 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== 5.1.9 on 2026-04-22 ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.6 on 2026-02-10 ===&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where certain documents couldn't be loaded anymore.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed an issue where the UI did not update properly when committing a direct edit input task.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Added a [[XAML#UBIKWebView|UBIKWebView]] control that includes a fix in the WebView2 where some links could not be opened.&lt;br /&gt;
* Fixed issue that caused input fields to be focused but not editable.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Free Text Annotations that where created in former sessions cannot be selected and therefore cannot be edited any more.&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* Known issues regarding the [[Documents_(Client)#Remember_Document_Settings|Remember Document Settings]] feature:&lt;br /&gt;
** Saving the Zoom value via touch gestures is not supported.&lt;br /&gt;
** Due to a third-party framework issue it can't be guaranteed that saving the Zoom level is always working properly. We reported this issue and will update our solution as soon as it is resolved on their side.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
* There are some XAML changes necessary when using the new [[Active_List_Client|Active List]] feature, or when using the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]]. These XAML changes are explained [[Active_List_Client#XAML|here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (WinX)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 5.1 (WinX)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29757</id>
		<title>Version 5.1 (Mobile)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29757"/>
				<updated>2026-04-28T07:44:59Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|Existing pre 5.0 XAMLs are not compatible with UBIK Mobile client 5.1. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|UBIK 5 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|The minimum supported OS versions are:&lt;br /&gt;
* Android 9;&lt;br /&gt;
* iOS 12.}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Preview}}: Available through Google Play Store's [https://play.google.com/store/apps/details?id=com.augmensys.ubik.go invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/Kmb1HG9E invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Preview}}: Available through Apple App Store's [https://testflight.apple.com/join/yHRnbYbt invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|Windows: Store Preview}}: The mobile Windows client is not an official product and is only distributed as test versions upon request and/or in our [https://release.augmensys.com/download/modules/client/mobile/ release portal].&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
* The system flashlight can now also be enabled or disabled via XAML customization. For detailed information, see [[Mobile XAML#Flashlight|Flashlight]]&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* [[MRO_Objects_(Client)#Signature_Task|MRO Signature Tasks]] have been introduced, which automatically displays the signee as well as the validation timestamp after the task has been signed.&lt;br /&gt;
* Fixed an issue where changes in property editing were not discarded when using the default Back button.&lt;br /&gt;
* Fixed an issue where the application crashed on Windows when navigating back from the VideoPlayer.&lt;br /&gt;
* Icon set Addition 8: Added Show/Hide, AI, Info, and various Procedure icons.&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where MRO task items displayed an incorrect DataTemplate after scrolling within a list.&lt;br /&gt;
* Fixed an issue where the client could fail at large file uploads (or even crash) due to device running out of memory.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems. The standard UI is not yet redesigned to show multi-line texts, though. But you can do so in customizing if necessary.&lt;br /&gt;
* UBIK Client now supports [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Tasks]] configured with an [[Active_List_Client|Active List]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.30 2026-03-02 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.29 on 2026-02-26 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue where the POI button was only visible under certain condition (ShowUnreleasedFeatures in the profile is set to true).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.28 on 2026-02-10 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* The following features which existed in pre 5.0 versions are now available again in 5.1.&lt;br /&gt;
** [[Map_View|Map view]].&lt;br /&gt;
** [[POI_View_(Mobile)|POI view]]. (Aruco and OCR are not yet supported)&lt;br /&gt;
** Location service.&lt;br /&gt;
** [[Native_Push_(Client)|Native push]].&lt;br /&gt;
** [[Charts]].&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Complete UI overhaul introduces a cleaner, more modern and adaptive user interface with various quality of life improvements.&lt;br /&gt;
* UBIKTabView supports both dynamic and static items in combination with lazy loading.&lt;br /&gt;
* Files in the app's data folder can now be opened or deleted directly in the developer settings.&lt;br /&gt;
* Introduced a fully resource-driven UI theming system enabling fast, safe customization (dark mode, resizing, and consistent styling) by adapting a small set of centralized resources.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* Fixed an issue where remembered scroll positions were lost when the ItemsSource property of an SfListViewExt changed (e.g., Properties.ShowAllProperties).&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed issue that caused app to be stuck on splash screen after resuming from background.&lt;br /&gt;
* Fixed an issue where StatusColor was not shown in the UI for objects that didn't additionally have a Progress.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Fixed an issue that caused content of the custom ContentControl to not be rendered sometimes.&lt;br /&gt;
* (Android) Fixed an issue in the WebView where some links could not be opened.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the deletion of some objects was not reflected in the UI until refresh.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true. In Mobile, deleting the last annotation does not correctly update the editor's internal edit state. As a result, the Save button may remain visible even though no edits exist.&lt;br /&gt;
* When changing the device orientation during attaching a photo on iOS, the app gets stuck. This is an issue Microsoft confirmed in .NET9 and will fix in .NET10.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
* The periodic execution of background pushes is not guaranteed on iOS (the native push feature doesn't have this issue).&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* It is currently not possible to select which camera to use for AR views (e.g. scan page) on Windows.&lt;br /&gt;
* SfPullToRefresh was removed due to [[Mobile_XAML#Issues_with_SfPullToRefresh_in_Mobile_client|existing issues]], and replaced with a Refresh option in the Context menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
* Due to the change of the underlying XAML technology, the existing XAMLs for the old mobile clients (pre 5.0) are no longer compatible. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.&lt;br /&gt;
* There are some XAML changes necessary when using the new [[Active_List_Client|Active List]] feature, or when using the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]]. These XAML changes are explained [[Active_List_Client#XAML|here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29756</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29756"/>
				<updated>2026-04-28T07:40:57Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction {{Version/WinXSince|5.1.0.0}}{{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList. For more information about Active Lists follow [[UBIK_Active_Lists|this link]].}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. The following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it should be changed to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''after the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''before the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItems}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''after the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''before the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Attention|When binding to ''SelectiveItems'', the ''SelectiveListToItemsConverter'' is outdated and should not be used anymore. Further info see [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]].}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=UBIK_Active_Lists&amp;diff=29755</id>
		<title>UBIK Active Lists</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=UBIK_Active_Lists&amp;diff=29755"/>
				<updated>2026-04-28T07:37:45Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UBIK}} ActiveLists provide the possibility to configure instance-specific lists for integer MetaProperties.&lt;br /&gt;
&lt;br /&gt;
= Purpose =&lt;br /&gt;
In some cases it is required to define a list of selectable values for an integer MetaProperty that is specific to a single instance rather than globally defined at the MetaClass level. For example, two instances of the same MetaClass can offer different selectable values for the same MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{UBIK}} ActiveLists are the representation of such lists. They update dynamically on the client side without requiring an ACM rebuild and can be maintained per instance through server methods.&lt;br /&gt;
&lt;br /&gt;
If a MetaProperty has both a SelectiveList and an ActiveList, the ActiveList takes precedence when data is displayed on the client, and the SelectiveList is ignored.&lt;br /&gt;
&lt;br /&gt;
= Client Behavior =&lt;br /&gt;
When the user opens an ActiveList:&lt;br /&gt;
* The label for each option is shown in the language configured on the web service. If a translation for the configured language is unavailable, the label is displayed in the default language.&lt;br /&gt;
* Each option in the ActiveList has an associated unique integer value that is set to the MetaProperty when selected.&lt;br /&gt;
* Only one option can be selected at a time. Selecting an option updates the MetaProperty value immediately.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sorting of items in the dropdown:&lt;br /&gt;
&lt;br /&gt;
* If all options in the ActiveList have unique sort order values, they are displayed in ascending order of these sort order values.&lt;br /&gt;
* If sort orders are not unique, options with the same sort order are sorted in ascending order by their label.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details see: [[Active List Client]]&lt;br /&gt;
&lt;br /&gt;
= Server-Side Concept =&lt;br /&gt;
ActiveLists are stored in serialized JSON form in the '''ACTIVE_LISTS''' property of the instance.&lt;br /&gt;
&lt;br /&gt;
* Each list is associated with exactly one integer MetaProperty of the instance.&lt;br /&gt;
* An instance can have multiple ActiveLists, one for each integer MetaProperty.&lt;br /&gt;
* ActiveLists can be viewed in UBIK.Studio in the Object Explorer under “ActiveLists” for the instance, but they cannot be edited there.&lt;br /&gt;
&lt;br /&gt;
= Managing {{UBIK}} ActiveLists =&lt;br /&gt;
ActiveLists are managed entirely through server methods. The most relevant methods are:&lt;br /&gt;
&lt;br /&gt;
=== AddOrUpdateActiveList(metaProperty, value, labels, sortOrder) ===&lt;br /&gt;
Adds a new list item or updates the labels of an existing one. Optionally repositions the item according to sortOrder.&lt;br /&gt;
&lt;br /&gt;
=== SortActiveList(metaProperty, orderedValues) ===&lt;br /&gt;
Reorders the items of a list according to the specified sequence. Items not included in '''orderedValues''' are appended in their current order.&lt;br /&gt;
&lt;br /&gt;
=== RemoveActiveListItem(metaProperty, value) ===&lt;br /&gt;
Removes a single list item by its integer value.&lt;br /&gt;
&lt;br /&gt;
=== RemoveActiveList(metaProperty) ===&lt;br /&gt;
Removes the entire list for the given MetaProperty.&lt;br /&gt;
&lt;br /&gt;
=== GetActiveLists() ===&lt;br /&gt;
Returns all ActiveLists defined on the instance as '''UbikActiveList''' objects, each containing the MetaProperty name and its list items.&lt;br /&gt;
&lt;br /&gt;
= Who-Bert Example =&lt;br /&gt;
The following Who-Bert snippet demonstrates how to work with an ActiveList for a MetaProperty named &amp;quot;'''MP_INT_A'''&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using UBIK.Kernel;&lt;br /&gt;
using UBIK.Runtime;&lt;br /&gt;
using UBIK.Runtime.Sys;&lt;br /&gt;
using UBIK.Compiler;&lt;br /&gt;
using UBIK.Content;&lt;br /&gt;
&lt;br /&gt;
namespace Studio&lt;br /&gt;
{&lt;br /&gt;
    public class ObjectTest&lt;br /&gt;
    {&lt;br /&gt;
        public void TestObject(params BaseClass[] InVariables)&lt;br /&gt;
        {&lt;br /&gt;
            Debugger.Output(this, &amp;quot;*** Started ActiveList Example&amp;quot;);&lt;br /&gt;
            foreach (BaseClass obj in InVariables)&lt;br /&gt;
            {&lt;br /&gt;
                ContentClass c = obj as ContentClass;&lt;br /&gt;
&lt;br /&gt;
                var labels1 = new Dictionary&amp;lt;string, string&amp;gt; { { &amp;quot;en&amp;quot;, &amp;quot;One&amp;quot; }, { &amp;quot;de&amp;quot;, &amp;quot;Eins&amp;quot; } };&lt;br /&gt;
                var labels2 = new Dictionary&amp;lt;string, string&amp;gt; { { &amp;quot;en&amp;quot;, &amp;quot;Two&amp;quot; }, { &amp;quot;de&amp;quot;, &amp;quot;Zwei&amp;quot; } };&lt;br /&gt;
                var labels3 = new Dictionary&amp;lt;string, string&amp;gt; { { &amp;quot;en&amp;quot;, &amp;quot;Three&amp;quot; }, { &amp;quot;de&amp;quot;, &amp;quot;Drei&amp;quot; } };&lt;br /&gt;
&lt;br /&gt;
                // Add items&lt;br /&gt;
                c.AddOrUpdateActiveList(&amp;quot;MP_INT_A&amp;quot;, 1, labels1);&lt;br /&gt;
                c.AddOrUpdateActiveList(&amp;quot;MP_INT_A&amp;quot;, 2, labels2);&lt;br /&gt;
                c.AddOrUpdateActiveList(&amp;quot;MP_INT_A&amp;quot;, 3, labels3);&lt;br /&gt;
&lt;br /&gt;
                // Update labels and move item 3 to index 0&lt;br /&gt;
                var labels3Updated = new Dictionary&amp;lt;string, string&amp;gt; { { &amp;quot;en&amp;quot;, &amp;quot;Three Updated&amp;quot; }, { &amp;quot;de&amp;quot;, &amp;quot;Drei Aktualisiert&amp;quot; } };&lt;br /&gt;
                c.AddOrUpdateActiveList(&amp;quot;MP_INT_A&amp;quot;, 3, labels3Updated, 0);&lt;br /&gt;
&lt;br /&gt;
                // Sort items: 2, 1, 3&lt;br /&gt;
                c.SortActiveList(&amp;quot;MP_INT_A&amp;quot;, new int[] { 2, 1, 3 });&lt;br /&gt;
&lt;br /&gt;
                // Remove item 1&lt;br /&gt;
                c.RemoveActiveListItem(&amp;quot;MP_INT_A&amp;quot;, 1);&lt;br /&gt;
&lt;br /&gt;
                c.Save();&lt;br /&gt;
            }&lt;br /&gt;
            Debugger.Output(this, &amp;quot;*** Finished ActiveList Example&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
} &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Further Notes =&lt;br /&gt;
&lt;br /&gt;
* ActiveLists are designed for lightweight, instance-specific value lists that can be updated without ACM rebuilds.&lt;br /&gt;
* They are ideal for use cases where list content varies between instances of the same MetaClass.&lt;br /&gt;
* When both an ActiveList and a SelectiveList are defined for the same MetaProperty, the ActiveList overrides the SelectiveList on the client.&lt;br /&gt;
&lt;br /&gt;
[[Category:Server|UBIK Active Lists]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29753</id>
		<title>MRO Objects (Client)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)&amp;diff=29753"/>
				<updated>2026-04-28T07:32:23Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:MRO_WinX.png|thumb|alt=MRO Child List UI (WinX)|MRO UI (WinX)]]&lt;br /&gt;
[[File:MRO_MAUI1.jpeg|thumb|alt=MRO Child List UI (Android)|MRO UI (Android)]]&lt;br /&gt;
The WinX client UI displays MRO configured objects like any other root- or child-object enriched by some additional logic and features.&lt;br /&gt;
&lt;br /&gt;
== Basic User Interface ==&lt;br /&gt;
The representation of MRO features comprises some indicators and interactive controls. In the {{UBIK}} child list, the main object displays cumulated technical and organisational status as well as the overall work progress based on the underlying data branch. Objects classified as MRO objects in general provide indicators for the MRO status. This means the status is shown next to the main icon of a child-/details-/documents-page as well as next to the icons of the child list items:&lt;br /&gt;
&lt;br /&gt;
=== Technical Status ===&lt;br /&gt;
&lt;br /&gt;
The technical status indicator is shown on all objects that represent a technical state or receive the technical status from subsequent objects in the underlying data branch. If e.g. a inventory object is reported as damaged, its parent objects will all display the exclamation mark symbol to indicate that a problem was reported in the child items.&lt;br /&gt;
&lt;br /&gt;
[[File:TechStats_WinX.png|100px|Technical Status Indicator (Winx &amp;amp; Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== Organisational Status ===&lt;br /&gt;
The organisational status indicates the amount of confirmed work within the data branch, including already confirmed work packages as well as tasks that are locked by their owning work package. The organisational status indicator is displayed on all objects that represent an organisational state or receive the organisational status from subsequent objects in the underlying data branch, and visualizes the amount of confirmed work performed within that branch.&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:UI_WinX_MRO_OrganisationalStatusIndicator.png|Organisational Status Indicator (WinX)&lt;br /&gt;
File:ConfirmedWP_WinX.png|MRO Workpackage Confirmed (Flag) Indicator (WinX)&lt;br /&gt;
File:Android_orga_status.PNG|Organisational Status Indicator (Android)&lt;br /&gt;
File:ConfirmedWP_MAUI.jpeg|MRO Workpackage Confirmed Indicator (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Work Progress ===&lt;br /&gt;
The work progress is calculated from the current work progress and from the progress cumulated from subsequent objects in the underlying data branch. This indicator shows the amount of work done in the data branch.&lt;br /&gt;
&lt;br /&gt;
{{Version/WinXSince|5.0}} {{Version/MobileSince|5.0}} By default, the progress is displayed with maximum one decimal place. For example, 99.75% is displayed as 99.8%. The format string used to achieve this is &amp;lt;code&amp;gt;{0:0.#}%&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If other numeric formats are preferred in your usecases, you can refer to [https://learn.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings custom numeric format strings] for more information. The template to customize for this is the UBIKMROProgressBadge within UBIKThemes.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== MRO Objects ==&lt;br /&gt;
A set of specific objects can be used to provide the required structure for MRO:&lt;br /&gt;
&lt;br /&gt;
=== Task Owner ===&lt;br /&gt;
A [[MROCLS_MRO_TASKOWNER|Task Owner]] is an object having a substructure of jobs to be done. It can have a tree of other task owners or work packages underneath that will update the status of the task owner. This status consists of technical, organisational and progress information. With a task owner a user can get an overview of all the work to be done in the underlying job structure.&lt;br /&gt;
&lt;br /&gt;
=== Work Package===&lt;br /&gt;
A [[MROCLS_MRO_WORKPACKAGE|Work Package]] is a collection of objects to collect and summarize other task owning objects, workpackages, or tasks. A simple workpackage has a certain amount of tasks that have to be finished in order to confirm the workpackage as done. More complex workpackages can also own other underlying workpackages that have to be confirmed.  Confirming a workpackage itself requires a progress of 100% of all related tasks, as well as 100% confirmed sub work packages.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
File:ConfirmingWP_WinX.png|MRO Workpackage confirm button (WinX)&lt;br /&gt;
File:MRORevoke_WinX.png|MRO Workpackage revoke confirmation button (WinX)&lt;br /&gt;
File:ConfirmingWP_MAUI.jpeg|MRO Workpackage confirm button (Android)&lt;br /&gt;
File:MRORevoke_MAUI.jpeg|MRO Workpackage revoke confirmation button (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Task ===&lt;br /&gt;
A [[MROCLS_MRO_TASK|Task]] is an object reporting a certain progress to the owning workpackage. There are several specialized types of task objects. All kinds of tasks have a property called '''VALUE''' in common. It is very important, that this property is able to be validated. Therefore, a MetaAttribute (providing a validation timestamp by default) has to be attached on the used MetaProperty.&lt;br /&gt;
&lt;br /&gt;
On both clients, a Task can be reverted by clicking twice on the Not Applicable button.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|The MetaProperty ''VALUE'' has to use [[Attributes]] in order to be validated. Otherwise, the calculation of work progress will not be possible.}}&lt;br /&gt;
&lt;br /&gt;
==== Measurement Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_MEASUREMENT_TASK|Measurement Task]] inherits from [[MROCLS_MRO_TASK|Task]] and documents a measured value (e.g. read from a pressure gauge). Therefore, clicking the value on the shown task opens an editor to enter the desired value. If no value was entered before, an empty line will be shown. Once a value has been entered, the task is finished. Alternatively, the task can also be closed by the option ''Not Applicable'' to document the situation of not being able to fullfill the measurement (e.g. the pressure gauge is broken). An additional small value indicator below the main value can report e.g. the previously entered value. The behaviour of this previous value indicator has to be specified separately in the customizing.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Measurment Task Empty UWP.png|Measurement Task without a reported value (WinX)&lt;br /&gt;
File:Measurment Task Not Empty UWP.png|Measurement Task with a reported value (WinX)&lt;br /&gt;
File:Measurment Task Empty Android.jpg|Measurement Task without a reported value (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Progress Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_PROGRESS_TASK| Progress Task]] inherits from [[MROCLS_MRO_MEASUREMENT_TASK|Task]] and reports a certain progress while fullfilling a task. The progress will influence the overall progress of the owning workpackage. If the task cannot be fullfilled, it can also be finished with the option ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
There is also an [[MRO_PROGRESS_TASK_EDITOR|alternative editor]] available for progress tasks.{{Version/WinXSince|2.5.4}}&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Progress Task UWP.png|Progress Task with a reported work progress (WinX)&lt;br /&gt;
File:Progress Task Android.jpg|Progress Task with a reported work progress and a previous progress(Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Check Task ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_CHECK_TASK|Check Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished by reporting ''Done'' or ''Not Applicable''. This is intended for a simple To-Do task that is either done or not.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Check Task finished UWP.png|Unfinished MRO CheckTask (WinX)&lt;br /&gt;
File:Check Task android.jpg|Not Applicable MRO CheckTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Inspection Task ====&lt;br /&gt;
&lt;br /&gt;
[[MROCLS_MRO_INSPECTION_TASK|Inspection Task]] inherits from [[MROCLS_MRO_TASK|Task]] and is finished, when the user reports with a positive or negative answer or ''Not Applicable'' (e.g. reporting a yes/no answer for existing equipment).&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=497px heights=69px&amp;gt;&lt;br /&gt;
File:Finished Inspection Task UWP.png|Finished MRO InspectionTask (WinX)&lt;br /&gt;
File:Inspection task android.jpg|Finished MRO InspectionTask (Android)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Sequential Task ====&lt;br /&gt;
The [[MROCLS_SEQUENTIALTASK|sequential task classification]] allows you to pre-define a sequence in which tasks are to be resolved by users. This means that it is required for one or multiple tasks to be finished in order for other tasks to become &amp;quot;unlocked&amp;quot; and editable. A task can have any number of &amp;quot;predecessors&amp;quot;. Predecessors are the tasks that are required to be finished first.&lt;br /&gt;
&lt;br /&gt;
A task can have predecessors that live anywhere else in the object hierarchy. It is not necessary for a task and its predecessors to be part of the same work package, even though this is likely the most common use case.&lt;br /&gt;
&lt;br /&gt;
The state of a sequential task is evaluated both offline and online to get the best possible user experience. The user will see dependent tasks update immediately if their successors were finished, if those tasks are currently visible in the UI. There is 1 case in which the server-side state will override the client-side (offline) evaluation, discussed below.&lt;br /&gt;
The state of each sequential task is evaluated the following way:&lt;br /&gt;
&lt;br /&gt;
# If the server-side state says the task is open, we consider this as the truthful state and don't do any other evaluation.&lt;br /&gt;
# Check if the task has any predecessors.&lt;br /&gt;
# Try to load each predecessor task.&lt;br /&gt;
#* If loading of any predecessor fails (the object is not available offline), the task will be locked.&lt;br /&gt;
# If all predecessor tasks are finished, the task is open and can be edited. Otherwise, the task is locked.&lt;br /&gt;
&lt;br /&gt;
The customizer setting up the task dependency relations needs to ensure that the dependencies are not cyclical. In this case, it would be impossible for any tasks in the &amp;quot;cycle&amp;quot; to be finished.&lt;br /&gt;
&lt;br /&gt;
'''Example'''&lt;br /&gt;
&lt;br /&gt;
As a demonstration of this feature, see [[Media:Sequential_tasks_winx.mp4|this video]]. The relations between tasks are defined as in [[Media:Task_relations.png|this image]], starting at A1 and A2, which are not dependent on any other tasks. The lines (from left to right) indicate dependencies. This means that B2 has tasks A1 and A2 as its predecessors, for example.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Grouped Task {{Version/WinXSince|4.2}}{{Version/XamarinSince|4.2}} ====&lt;br /&gt;
Sometimes, not all tasks have to be finished. More specifically, there might be a predefined condition where you only need to finish a certain number of tasks among a group of them. These are known in {{UBIK}} as [[MROCLS_GROUPEDTASK|grouped tasks]].&lt;br /&gt;
&lt;br /&gt;
The idea is, a group of tasks can be defined as siblings to each other and they also share the same server configured threshold. When the number of finished tasks among that group exceeds the threshold, the entire group is considered as no longer necessary. When reflected in the overall status of the task owner(s), these tasks would appear as if they are finished.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Technically speaking, the finished status is completely independent from the not necessary status on a task. A grouped task which is no longer necessary can be both finished or not yet finished. In other words, users don't have to finish a not necessary grouped task, but they still can.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|The precise status calculation for grouped tasks and their task owners requires the knowledge of all siblings tasks. Imagine 2 out of 3 tasks must be finished but the client only knows 1 in total and the others are only available at the server at that time. This makes it impossible to draw conclusions whether the task(s) should be necessary or not. Under such circumstances, the local status calculation is done as if these are just regular tasks.}}&lt;br /&gt;
&lt;br /&gt;
{{Hint|Like with the other MRO objects, the client always chooses the best available statuses for grouped tasks to present to the users. More specifically, it uses the statuses calculated by the server when the client is not offline and there are no uncommitted local changes on the involved objects. Otherwise, it uses the statuses calculated locally to the best of its knowledge.}}&lt;br /&gt;
&lt;br /&gt;
A task can also be a grouped and a sequential one at the same time. In such a case, the grouped nature of the sibling tasks will affect the way the task sequence completes.&lt;br /&gt;
&lt;br /&gt;
For example, task A1, A2 and A3 are 3 grouped sibling tasks and only 1 of them needs to be finished. At the same time, they are all predecessors of task B. Normally, all predecessors must be finished (and locked) before task B becomes the next one in the sequence and therefore unlocked. In this case, however, as soon as one of the predecessors is finished, all three become unnecessary (and locked) and task B unlocks as a result of that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Supervisor Task {{Version/XamarinSince|4.8}} ====&lt;br /&gt;
As the name suggests, supervisor tasks are those that must be finished under supervision. When users want to finish a [[MROCLS_MRO_SUPERVISOR_TASK|supervisor task]], they must hand over their work devices to a supervisor. The latter checks the work status and scans an NFC tag if the work is approved. If the [[MROCLS_MRO_SUPERVISOR|supervisor]] has sufficient permissions for the task and the correct supervisor PIN is given, the task gets unlocked and the users can proceed to finish it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=300px heights=300px&amp;gt;&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Before_Verification.jpg|Supervisor Task Before Verification/Unlocking (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_Enter_PIN.jpg|Supervisor Task Enter PIN (Mobile)&lt;br /&gt;
File:UI_Xamarin_Supervisor_Task_After_Verification.jpg|Supervisor Task After Verification/Unlocking (Mobile)&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A thing to note is that while the need to verify a supervisor task can be seen as a type of locking, it's certainly not the only reason for a [[Locked_Objects|locked object]]. This means a supervisor task can remain locked (although for different reasons) even after a supervisor has successfully verified it. This can often be the case if you use it in combination with other features such as [[MRO_Objects_(Client)#Sequential_Task|sequential tasks]], [[User_Rights|user rights]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|For security reasons, the verification process is cancelled if the supervisor enters the wrong PIN for three times. Scanning the tag again is required in that case.}}&lt;br /&gt;
{{Hint|A setting controls [[RFID_tags#Choose_which_information_to_use_from_a_tag|which information in a scanned tag is used]] during this process.}}&lt;br /&gt;
&lt;br /&gt;
==== Signature Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
The Signature Task is a task type that is completed by capturing a handwritten signature from the user. The task contains an editor field that serves as the entry point for the signing process. When the user clicks (or taps) on the editor field, a signature dialog opens. Within this dialog, the user can provide their signature. After confirming the input, the signature is saved and the task is automatically marked as completed.&lt;br /&gt;
&lt;br /&gt;
If the task is signed while the client is online:&lt;br /&gt;
* The User (signee) is resolved immediately by the server and displayed.&lt;br /&gt;
* The ValidationTimestamp is generated and displayed.&lt;br /&gt;
* Both values are shown directly in the editor field after signing.&lt;br /&gt;
&lt;br /&gt;
{{Hint|The User only gets resolved by the server and displayed once you're in online mode}}&lt;br /&gt;
&lt;br /&gt;
If the displayed User and/or ValidationTimestamp cannot be fully shown due to limited space in the editor field, the complete information can be accessed via a tooltip.&lt;br /&gt;
&lt;br /&gt;
* In '''UBIK WinX (UWP)''', hover over the editor field with the mouse.&lt;br /&gt;
* In '''UBIK Mobile''', perform a long press on the editor field.&lt;br /&gt;
A tooltip will appear, displaying the full User and ValidationTimestamp without truncation.&lt;br /&gt;
&lt;br /&gt;
==== Picture Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICTURE_TASK|picture task]] is a check task which can only be finished when it has at least one child document containing a valid file. In the UI, an additional photo button is presented next to the check so users can easily take photos before finishing the tasks.&lt;br /&gt;
* As any other objects, picture tasks can carry and display [[SYSCLS_CHILDINFOOWNER|child count information]]. But that is not a mandatory part of the feature. Even when it's not configured and not visible in the UI, you can still finish the tasks.&lt;br /&gt;
* In WinX/UWP, the UI also presents an expander which allows you to display the child documents of picture tasks. This is not present by default in the Mobile app due to the screen size limit but [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#Show_NextLevel_Children.2FDocuments|can be easily customized]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|The task is named as such because pictures are the most commonly used types, but the child documents can be of other types as well. }}&lt;br /&gt;
&lt;br /&gt;
When a user tries to finish a picture task by tapping the check, the app might perform some data synchronization first if in online mode, which includes&lt;br /&gt;
* Syncing the child objects (including documents) of the task.&lt;br /&gt;
* Downloading the file(s) of the child documents.&lt;br /&gt;
During data synchronization, the check button on that task turns into a wait indicator. Afterwards, the app checks if the prerequisites to finish the task are met.&lt;br /&gt;
* If there are no child documents or no local files for the child documents, the task remains unfinished and the user gets informed about the reasons.&lt;br /&gt;
* Otherwise, the task gets finished and the photo button gets disabled.&lt;br /&gt;
&lt;br /&gt;
{{Hint|Setting NA (not applicable) on a picture task is always possible, regardless of the condition of child documents.}}&lt;br /&gt;
&lt;br /&gt;
==== Numeric Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_MRO_NUMERIC_TASK|numeric task]] is a task which records a double value (e.g. from a temperature sensor). Entering the value (including Not Applicable) completes the task.&lt;br /&gt;
* The value is compared against an accaptable value range which is not editable on the client.&lt;br /&gt;
* Deviation from this range results in visual feedback as well as the [[#Tech Status|tech status]] being set to display an issue.&lt;br /&gt;
* If the configured value range is invalid (e.g. min &amp;gt; max) and the user enters a value, the [[#Tech Status|tech status]] will also be set to display an issue.&lt;br /&gt;
* A numeric task also has a special value unit that can be set per task instance. If set, it overrides the standard value unit defined on the [[MetaProperty#Unit_Item|MetaProperty]].&lt;br /&gt;
&lt;br /&gt;
==== Pick List Task {{Version/MobileSince|5.1}}{{Version/WinXSince|5.1}} ====&lt;br /&gt;
&lt;br /&gt;
A [[MROCLS_PICK_LIST_TASK|Pick List task]] looks and behaves the same like a standard Integer Task with SelectiveList. Other than the standard Integer Task, the Pick List Task has an [[UBIK_Active_Lists|Active List]] defined on instance level to pick from for its value property. The task counts as finished as soon as a list item has been selected, or when pressing ''Not Applicable''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== MRO objects with project information (WinX only) {{Version/WinXSince|2.5.4}} ===&lt;br /&gt;
[[File:UI_WinX_MRO_ProjectInfo.png|thumb|MRO Object with Project Info (WinX)]]&lt;br /&gt;
An MRO object (except tasks) might also bring along [[MROCLS_PROJECTINFORMATION|project information]]. In this case, the project information together with the MRO progress are displayed in a bar chart. The start &amp;amp; end dates of the MRO object are displayed on the progress bar. The length and the position of the progress bar, together with the current date mark indicate the timeline.&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Locking ==&lt;br /&gt;
When an (MRO) object is locked, editing it becomes impossible. More details about [[Locked_Objects|locked objects]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[MRO (Plugin)]]&lt;br /&gt;
* [[MROCLS_PROJECT]]&lt;br /&gt;
* [[MROCLS_PROJECTINFORMATION]]&lt;br /&gt;
* [[MROCLS_SEQUENTIALTASK]]&lt;br /&gt;
* [[MROCLS_GROUPEDTASK]]&lt;br /&gt;
* [[MROCLS_MRO_CHECK_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_INSPECTION_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_MEASUREMENT_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_PROGRESS_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASK]]&lt;br /&gt;
* [[MROCLS_MRO_TASKOWNER]]&lt;br /&gt;
* [[MROCLS_MRO_WORKPACKAGE]]&lt;br /&gt;
* [[MROCLS_PROCEDURE#Procedure Workpackage]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_TASK#Switch Task]] (Classification)&lt;br /&gt;
* [[MROCLS_SWITCH_END_TASK#Switch End Task]] (Classification)&lt;br /&gt;
* [[MROCLS_CALCULATION_TASK#Calculation Task]] (Classification)&lt;br /&gt;
* [[MROCLS_PICK_LIST_TASK]] (Classification)&lt;br /&gt;
&lt;br /&gt;
[[Category:Android|MRO Objects (UBIK WinX)]]&lt;br /&gt;
[[Category:Client|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Mobile|MRO Objects (Client)]]&lt;br /&gt;
[[Category:Pages with broken file links|MRO Objects (Client)]]&lt;br /&gt;
[[Category:WinX|MRO Objects (UBIK WinX)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Multi_Select_(UBIK_Client)&amp;diff=29752</id>
		<title>Multi Select (UBIK Client)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Multi_Select_(UBIK_Client)&amp;diff=29752"/>
				<updated>2026-04-28T07:28:06Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Editing common properties of selected items (UWP only) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Multi Select mode aims to improve the efficiency of performing actions on a large number of selected objects (Mobile &amp;amp; UWP), as well as changing property values for a large number of selected objects (UWP only). Editing property values for a large number of objects was known in some previous UWP versions as Mass Editing. Currently, the Multi Select mode is available for lists of children (including task and query objects) and documents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Activating the multi select mode ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
Clicking on a Multi Select button, which will appear when hovering over a list, activates the Multi Select mode. A panel at the left side gets displayed.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile&amp;quot;&amp;gt;&lt;br /&gt;
The Multi Select mode gets enabled by holding (long tapping) an item. As soon as it is active, a panel on the bottom gets displayed.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In XAML code, you can use &amp;lt;code&amp;gt;ListViewModel.BulkOperation.ToggleMultiSelectCommand&amp;lt;/code&amp;gt; to (de)activate the multi select mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Multi select panel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
The header displays the count of the currently selected items and three buttons.&lt;br /&gt;
The first one is for selecting all items, the second for deselecting all items at one click. The {{key press|x}} button closes the panel and deactivates the Multi Select mode.&lt;br /&gt;
Further, the panel contains two tabs.&lt;br /&gt;
The &amp;quot;properties&amp;quot; tab displays all common editable properties of the selected items. If none are selected, or if the selected items don't share any common properties, it will remain empty.&lt;br /&gt;
The &amp;quot;other options&amp;quot; tab contains buttons to perform actions on all selected items.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile&amp;quot;&amp;gt;&lt;br /&gt;
The Multi Select panel in the Mobile client is located at the bottom.&lt;br /&gt;
It displays the count of selected items, command buttons for Copy, Discard, Delete and Download actions and a close button to deactivate the Multi Select mode.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:UBIKWinXUI_MultiSelect1.JPG|thumb|Multi Select mode (UWP)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hint|Note: Please only use the buttons in the Multi Select Panel to perform actions on the selected objects. Others, like content area / context menu button actions are still related to the content page and do not work for the selected objects.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For the current usecase and the standard client, the Multi Select mode can be activated for Document and Children objects in parallel, hence when activating the Multi Select mode in the Children tab and then switching to Documents tab, it is possible to enable a separate Multi Select panel there.&lt;br /&gt;
&lt;br /&gt;
By navigating away from the related content page, all active Multi Select modes get deactivated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Selection ==&lt;br /&gt;
&lt;br /&gt;
[[File:UBIKCPLXUI_MultiSelect1.JPG|thumb|Multi Select mode (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
By default, all objects are deselected when the Multi Select Mode gets invoked. Items can be selected by tapping on them. Therefore, navigating into an object in the list by tapping on it is no longer available. To be able to navigate again, the Multi Select mode needs to be turned off.&lt;br /&gt;
&lt;br /&gt;
To select or deselect all items, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.SelectAllCommand&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ListViewModel.BulkOperation.DeselectAllCommand&amp;lt;/code&amp;gt; can be used as command binding. These options are currently not presented in the standard Mobile UI.&lt;br /&gt;
&lt;br /&gt;
In UWP, there are some additional selection related options besides &amp;quot;Select All&amp;quot; and &amp;quot;Deselect All&amp;quot;. Selecting or deselecting a bunch of items in a row can be achieved by holding shift and first clicking on the first required item and then clicking on the last required item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Performing actions on selected items ==&lt;br /&gt;
&lt;br /&gt;
The following actions are currently available in Multi Select mode:&lt;br /&gt;
* Copy / Paste&lt;br /&gt;
* Download Branches&lt;br /&gt;
* Discard Content&lt;br /&gt;
* Delete Content&lt;br /&gt;
* Download and Checkout (*)&lt;br /&gt;
* Checkout (*)&lt;br /&gt;
* Release (*)&lt;br /&gt;
* Revert local changes (*)&lt;br /&gt;
&lt;br /&gt;
Actions marked with (*) are currently not presented in the standard Mobile UI. But they can be easily customized in XAML code with the following commands.&lt;br /&gt;
&lt;br /&gt;
=== Copy and paste ===&lt;br /&gt;
To copy multiple branches, the &amp;lt;code&amp;gt;ListViewModel.BulkOperation.CopyBranchesCommand&amp;lt;/code&amp;gt; can be used without any additional CommandParameters.&lt;br /&gt;
The &amp;lt;code&amp;gt;ContentViewModel.PasteBranchCommand&amp;lt;/code&amp;gt; already supports pasting multiple branches, therefore, it can be used to paste the previously copied objects. To clarify, the UI (Mobile &amp;amp; UWP) does not include pasting content into the selected objects, rather pasting multiple, previously copied branches into one object. This can be done eg. via the Paste option in the Context Menu.&lt;br /&gt;
&lt;br /&gt;
=== Download branches ===&lt;br /&gt;
To download multiple branches, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;BranchDownloadCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
=== Discard content ===&lt;br /&gt;
To discard selected objects, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;DiscardContentCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
=== Delete content ===&lt;br /&gt;
To delete selected objects, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;DeleteContentCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
=== Download and checkout ===&lt;br /&gt;
This can be achieved by using the command for downloading, just with an additional KeyValueParameter to set the &amp;lt;code&amp;gt;Key=&amp;quot;CheckOut&amp;quot;&amp;lt;/code&amp;gt; to &amp;quot;True&amp;quot; as CommandParameter:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Button ... Command=&amp;quot;{Binding ListViewModel.BulkOperation.InvokeOnItemsCommand}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
        &amp;lt;controls:KeyValueList&amp;gt;&lt;br /&gt;
            &amp;lt;controls:KeyValueParameter Key=&amp;quot;Command&amp;quot; Value=&amp;quot;BranchDownloadCommand&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;controls:KeyValueParameter Key=&amp;quot;CheckOut&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/controls:KeyValueList&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Checkout ===&lt;br /&gt;
To checkout selected objects, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;CheckOutContentCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
=== Release ===&lt;br /&gt;
To release selected objects, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;ReleaseContentCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
=== Revert local changes ===&lt;br /&gt;
To revert local changes on objects, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;RevertLocalChangesCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Editing common properties of selected items (UWP only) ==&lt;br /&gt;
&lt;br /&gt;
When selecting or deselecting objects, the commonly shared properties on the left side are constantly updated during that process.&lt;br /&gt;
&lt;br /&gt;
{{Hint|For such a property, if all selected objects share the same property value, that value is displayed as it is; Otherwise, &amp;quot;...&amp;quot; is displayed to indicate the presence of various values.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once a user clicks/taps on such a property, an editor dialog is shown and the user can enter values just like when editing properties of single objects. However, when the user finishes editing and confirms the dialog, the value is saved to that property of all selected objects immediately.&lt;br /&gt;
&lt;br /&gt;
{{Hint|If the property being edited has various values, a default value (instead of the actual ones) is shown in the editor. E.g. empty for string type, false for boolean type, etc.}}&lt;br /&gt;
&lt;br /&gt;
Further editing of Link properties is currently not supported for multiple objects. Although the related button in the Guid editor dialog is clickable, it is currently inoperable. Also the ''Skipping the dialog'' feature (see [https://wiki.augmensys.com/index.php?title=Editors#Guid_editor| Guid Editor Wiki]) is currently not supported in Multi Select mode.&lt;br /&gt;
&lt;br /&gt;
{{Attention|Mass editing is currently not supported for Properties containing [[Active_List_Client|Active Lists]].}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:Mobile|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:Version 4.3|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:WinX|Mass Edit (UBIK WinX)]]&lt;br /&gt;
[[Category:XAML|Multi Select (UBIK Client)]]&lt;br /&gt;
&lt;br /&gt;
== Multi select for filtered lists ==&lt;br /&gt;
&lt;br /&gt;
In the standard UI, multi selection targets the original unfiltered lists. However, those lists are often presented in several filtered lists in many cases. See content filtering in [[XAML_Changes_in_UBIK_WinX_3.5#Filtering_by_expressions|UWP]] and in [[Xamarin_XAML#Content_filtering|Mobile]].&lt;br /&gt;
&lt;br /&gt;
The multi select related XAML code (essentially &amp;lt;code&amp;gt;ListViewModel.BulkOperation&amp;lt;/code&amp;gt;) in the standard UI can not be used directly in such scenarios. Because all filtered lists share the same original source list (&amp;lt;code&amp;gt;ListViewModel&amp;lt;/code&amp;gt;). If the multi select feature is turned on from the original source list, all filtered lists will be affected.&lt;br /&gt;
&lt;br /&gt;
For example, a source list can be divided into two filtered lists, one for finished tasks and the other for the unfinished ones. If you use the &amp;lt;code&amp;gt;ListViewModel.BulkOperation.SelectAllCommand&amp;lt;/code&amp;gt;, it will select all tasks even though in the UI it will appear as if only those finished/unfinished are selected.&lt;br /&gt;
&lt;br /&gt;
To avoid such a situation, the multi select feature should be turned on from the filtered lists instead. This means the following types:&lt;br /&gt;
* UWP: ListCollectionView;&lt;br /&gt;
* Mobile: SfDataSourceExt.&lt;br /&gt;
&lt;br /&gt;
Here's also an example of multi select related XAML code adapted for a filtered list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid&lt;br /&gt;
     xmlns:cv=&amp;quot;using:UBIK.WinX.UI.CollectionView&amp;quot;&lt;br /&gt;
     xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
     xmlns:interactivity=&amp;quot;using:Microsoft.Xaml.Interactivity&amp;quot;&lt;br /&gt;
     xmlns:core=&amp;quot;using:Microsoft.Xaml.Interactions.Core&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Grid.Resources&amp;gt;&lt;br /&gt;
      &amp;lt;x:String x:Key=&amp;quot;FilterExpression&amp;quot;&amp;gt;Item.Header.ToLower().Contains(&amp;amp;quot;1&amp;amp;quot;)==true&amp;lt;/x:String&amp;gt;&lt;br /&gt;
      &amp;lt;cv:ListCollectionView x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource FilterExpression}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Grid.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;!--  Multi Select Panel  --&amp;gt;&lt;br /&gt;
    &amp;lt;ContentControl&lt;br /&gt;
        ...&lt;br /&gt;
        ContentTemplate=&amp;quot;{Binding TemplateService[UBIKMultiSelectPanel]}&amp;quot;&lt;br /&gt;
        DataContext=&amp;quot;{StaticResource FilteredList}&amp;quot;&lt;br /&gt;
        Visibility=&amp;quot;{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource EqualToVisConverter}, ConverterParameter=Multiple, FallbackValue=Collapsed, TargetNullValue=Collapsed}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentControl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;!--  Filtered List  --&amp;gt;&lt;br /&gt;
    &amp;lt;controls:SelectionBoundListView&lt;br /&gt;
        IsItemClickEnabled=&amp;quot;False&amp;quot;&lt;br /&gt;
        ItemsSource=&amp;quot;{StaticResource FilteredList}&amp;quot;&lt;br /&gt;
        SelectionMode=&amp;quot;{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource ChildItemSelectionModeToListViewSelectionModeConverter}}&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;core:EventTriggerBehavior EventName=&amp;quot;SelectionChanged&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;core:InvokeCommandAction Command=&amp;quot;{Binding BulkOperation.ItemSelectionChangedCommand, Source={StaticResource FilteredList}}&amp;quot; InputConverter=&amp;quot;{StaticResource SelectionChangedEventArgsConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/core:EventTriggerBehavior&amp;gt;&lt;br /&gt;
      &amp;lt;/interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:SelectionBoundListView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;!--  Multi Select Toggle Button  --&amp;gt;&lt;br /&gt;
    &amp;lt;Button&lt;br /&gt;
        ...&lt;br /&gt;
        Command=&amp;quot;{Binding BulkOperation.ToggleMultiSelectCommand, Source={StaticResource FilteredList}}&amp;quot;&lt;br /&gt;
        Visibility=&amp;quot;{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource EqualToVisConverter}, ConverterParameter=None}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile(Xamarin)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid&lt;br /&gt;
     xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&lt;br /&gt;
     xmlns:behaviors=&amp;quot;clr-namespace:UBIK.CPL.Behaviors;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;x:String x:Key=&amp;quot;Expresssion&amp;quot;&amp;gt;Item.Header.ToLower().Contains(&amp;amp;quot;1&amp;amp;quot;)==false&amp;lt;/x:String&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource Expresssion}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; Unloaded=&amp;quot;{Binding SkipFiltering}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;!-- Filtered List --&amp;gt;&lt;br /&gt;
    &amp;lt;controls:SfListViewExt&lt;br /&gt;
        ...&lt;br /&gt;
        ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource FilteredList}}&amp;quot;&lt;br /&gt;
        SelectionGesture=&amp;quot;Tap&amp;quot;&lt;br /&gt;
        SelectionMode=&amp;quot;{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource SelectionModeConverter}}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;controls:SfListViewExt.Behaviors&amp;gt;&lt;br /&gt;
            &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;SelectionChanged&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:InvokeCommandAction Command=&amp;quot;{Binding BulkOperation.ItemSelectionChangedCommand, Source={StaticResource FilteredList}}&amp;quot; Converter=&amp;quot;{StaticResource SelectionChangedEventArgsConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
            &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;ItemHolding&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:InvokeCommandAction Command=&amp;quot;{Binding BulkOperation.ToggleMultiSelectCommand, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;/controls:SfListViewExt.Behaviors&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;!-- Multi Select Panel --&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView&lt;br /&gt;
        ...&lt;br /&gt;
        BindingContext=&amp;quot;{StaticResource FilteredList}&amp;quot;&lt;br /&gt;
        ControlTemplate=&amp;quot;{StaticResource UBIKMultiSelectTemplate}&amp;quot;&lt;br /&gt;
        IsVisible=&amp;quot;{Binding BulkOperation.ItemSelectionMode, Converter={StaticResource EqualityToBool}, ConverterParameter=Multiple, FallbackValue=false, TargetNullValue=false}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hint|The critical part is that wherever the &amp;lt;code&amp;gt;BulkOperation&amp;lt;/code&amp;gt; property is accessed, it must be accessed from the &amp;lt;code&amp;gt;FilteredList&amp;lt;/code&amp;gt;, not the original unfiltered &amp;lt;code&amp;gt;Children.Items&amp;lt;/code&amp;gt; collection. When all references have been updated, the only remaining reference to 'Children' should be in FilteredList, as the ItemsSource attribute.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:Mobile|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:Version 4.3|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:WinX|Mass Edit (UBIK WinX)]]&lt;br /&gt;
[[Category:XAML|Multi Select (UBIK Client)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29751</id>
		<title>UBIK WinX Client Basics</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29751"/>
				<updated>2026-04-28T07:26:40Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Selective List Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UBIK}} Client is the mobile application for viewing and modifying data, showing documents, starting navigation, visualizing POIs and much more.&lt;br /&gt;
&lt;br /&gt;
Client applications are available for Mobile and WinX, however the features available on each of the platform dependent applications might differ. An overview of the available features can be found in the [[Client_Feature_Table|feature comparison table]].&lt;br /&gt;
&lt;br /&gt;
== Languages ==&lt;br /&gt;
The standard {{UBIK}} client supports multiple languages listed below. {{Version/WinXSince|4.3}}&lt;br /&gt;
* Chinese (Simplified)&lt;br /&gt;
* Czech&lt;br /&gt;
* English&lt;br /&gt;
* German&lt;br /&gt;
* Polish&lt;br /&gt;
* Portuguese&lt;br /&gt;
* Spanish&lt;br /&gt;
{{Attention|As we found out, you can only switch to one of the supported languages if it is installed as a system language in the Windows &amp;quot;Preferred languages / Add a language&amp;quot; setting. For example, if you have only English installed when you install {{UBIK}}, you won't be able to switch to any other languages even if you add those later. In that case, you need to make sure your language of choice is installed in Windows first, then update or reinstall {{UBIK}}. This is a Microsoft Store practice and does not apply to clients installed through sideloading, e.g. from our AppCenter.}}&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
Users need to login in order to access confidential data, this can be done in the [[Login View]].&lt;br /&gt;
&lt;br /&gt;
=== Confirm login === &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
Certain pages might require to confirm the login data, even if the user is already logged in. This can be done in the following way: The CheckUserOfflineCommand needs to be called with the username and password as parameter, if the login was valid, the CheckUserOfflineSuccess boolean property is set to true, which causes the text &amp;quot;Login confirmed&amp;quot; to appear in the example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01User&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;User&amp;quot;&lt;br /&gt;
	Text=&amp;quot;{Binding UserName}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;PasswordBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01PW&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;Password&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;Button&lt;br /&gt;
	Command=&amp;quot;{Binding CheckUserOfflineCommand}&amp;quot;&lt;br /&gt;
	Content=&amp;quot;Confirm login&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
		&amp;lt;uc:KeyValueList&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;UserName&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01User, Path=Text}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;Password&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01PW, Path=Password}&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/uc:KeyValueList&amp;gt;&lt;br /&gt;
	&amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;TextBlock Text=&amp;quot;Login confirmed&amp;quot; Visibility=&amp;quot;{Binding AuthenticationViewModel.CheckUserOfflineSuccess, Source={StaticResource Locator}, FallbackValue=false, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Profiles ==&lt;br /&gt;
Profiles are used to store connection information for {{UBIK}} services. It specifies the location where to find the service along with other useful informations. Profiles are stored by UBIK whenever the user created connection information and stored it in the settings. However, profiles can also be created and edited with any text editor. Possible settings to be defined are:&lt;br /&gt;
* InternalConnectionSettings: Connections settings how to connect to the Content and the USAM service that has been set up.&lt;br /&gt;
** Application: the [[APPLICATION]] to use with the service&lt;br /&gt;
** AuthenticationPort: Port Number of the authentication (USAM) service (default: 777)&lt;br /&gt;
** AuthenticationProtocol: Protocol of the authentication service (default: https)&lt;br /&gt;
** AuthenticationServer: the ip address of the authentication server&lt;br /&gt;
** AuthenticationService: the path to the authentication service&lt;br /&gt;
** ContentPort: Port Number of the content service (default: 777)&lt;br /&gt;
** ContentProtocol: Protocol of the content service (default: https)&lt;br /&gt;
** ContentServer: the ip address of the content server&lt;br /&gt;
** ContentService: the path to the content service&lt;br /&gt;
** Context: the [[CONTEXT]] to use with the service&lt;br /&gt;
** SyncMode: the used sync mode (Online [= Auto], Manual, Offline; default:Online)&lt;br /&gt;
* IsDefault: true, if the profile should be the default profile&lt;br /&gt;
* Name: the name of the profile (will also be used to identify the database)&lt;br /&gt;
** If the profile name contains invalid characters like: /, &amp;quot;, &amp;lt;, &amp;gt;, ... they will be replaced with %_&lt;br /&gt;
* Project: the project name. Use this to share a single project name with more than one profile. If the project is defined, all profile with the same project will share one database.&lt;br /&gt;
* Customizing: the XAML subfolder to use for customized UI. This parameter can be used to share one single XAML customizing folder for multiple profiles.&lt;br /&gt;
* ShowHiddenSettings: show hidden settings (feault: false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Profile xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns=&amp;quot;http://schemas.datacontract.org/2004/07/UBIK.WinX.Settings&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Customizing&amp;gt;MYAPPLICATIONUI&amp;lt;/Customizing&amp;gt;&lt;br /&gt;
  &amp;lt;Description i:nil=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;InternalConnectionSettings&amp;gt;&lt;br /&gt;
    &amp;lt;Application&amp;gt;APP_DEMO&amp;lt;/Application&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationPort&amp;gt;777&amp;lt;/AuthenticationPort&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationProtocol&amp;gt;https&amp;lt;/AuthenticationProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationServer&amp;gt;80.243.175.50&amp;lt;/AuthenticationServer&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationService&amp;gt;UBIK/DBG/AUG/DEMO.250/USAM/USAM.svc&amp;lt;/AuthenticationService&amp;gt;&lt;br /&gt;
    &amp;lt;ContentPort&amp;gt;777&amp;lt;/ContentPort&amp;gt;&lt;br /&gt;
    &amp;lt;ContentProtocol&amp;gt;https&amp;lt;/ContentProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;ContentServer&amp;gt;80.243.175.50&amp;lt;/ContentServer&amp;gt;&lt;br /&gt;
    &amp;lt;ContentService&amp;gt;UBIK/DBG/AUG/DEMO.250/CONTENT/UBIKContent.svc&amp;lt;/ContentService&amp;gt;&lt;br /&gt;
    &amp;lt;Context&amp;gt;CXT_DEMO&amp;lt;/Context&amp;gt;&lt;br /&gt;
    &amp;lt;SyncMode&amp;gt;Online&amp;lt;/SyncMode&amp;gt;&lt;br /&gt;
  &amp;lt;/InternalConnectionSettings&amp;gt;&lt;br /&gt;
  &amp;lt;IsDefault&amp;gt;true&amp;lt;/IsDefault&amp;gt;&lt;br /&gt;
  &amp;lt;Name&amp;gt;DEMO.250.AT&amp;lt;/Name&amp;gt;&lt;br /&gt;
  &amp;lt;Project&amp;gt;DEMO.250&amp;lt;/Project&amp;gt;&lt;br /&gt;
  &amp;lt;ShowHiddenSettings&amp;gt;false&amp;lt;/ShowHiddenSettings&amp;gt;&lt;br /&gt;
&amp;lt;/Profile&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Content Browser ==&lt;br /&gt;
Allows to navigate through the entire data model in a hierarchical manner, as it is published by the server.&lt;br /&gt;
&lt;br /&gt;
Initially, a list of objects (&amp;quot;root objects&amp;quot;) is shown. Upon selecting an object, a new browser is opened for that object, showing details about it. When an object is selected in the content browser, it is called the browser's context. For such a contextual object, child objects and selected properties are shown. Also, there is a context menu providing actions related to the currently selected object. &lt;br /&gt;
&lt;br /&gt;
=== Status Bar ===&lt;br /&gt;
==== Saving Indicator ====&lt;br /&gt;
[[File:UI_WinX_DbSavingIndicator.PNG|300 px|thumb|border|alt=Saving Symbol|Saving Symbol]]&lt;br /&gt;
{{Version/WinXSince|2.5.4}}Whenever content is being saved into the local database (for example, after a branch is downloaded from the server), there will be a blinking symbol indicating the saving activity is happening in the background.&lt;br /&gt;
During that time, the user is advised to not logout or close the app because the content might be lost otherwise. However, it is okay to undertake other tasks such as browsing, editing or downloading branches.&lt;br /&gt;
&lt;br /&gt;
==== Uncommitted Changes Indicator ====&lt;br /&gt;
{{Version/WinXSince|4.6.0}} When there are uncommitted changes it is indicated by a button in the Status Bar displaying an icon and the number of uncommitted changes. Pressing this button opens a fly out list with all of the objects that have uncommitted changes to them. Pressing one of those list objects navigates directly to the corresponding object. The Uncommitted Changes Indicator button is only shown when there are uncommitted changes otherwise it is not visible. When in online mode all changes should be committed automatically so the Indicator is mainly useful in Manual or Offline Sync Mode.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Version/WinXSince|4.7.0}} Queries are now excluded from uncommitted changes.&lt;br /&gt;
&lt;br /&gt;
=== Child Page ===&lt;br /&gt;
&lt;br /&gt;
[[File:ChildPage.PNG|400 px|thumb|border|alt=Child Page|Child Page]]&lt;br /&gt;
&lt;br /&gt;
The child page shows the context of a selected object. &lt;br /&gt;
&lt;br /&gt;
The global status bar shows the icon, the name and the description of the selected object. An arrow on the left side allows the user to navigate back to the parent object. On the right side the currently logged-in user is indicated. By clicking on the username one is able to navigate back to the home screen or log off.&lt;br /&gt;
&lt;br /&gt;
The right side of the child page shows child objects of the current object. Each child object is represented by an icon, a name and a description. With the [[SYSCLS_CHILDINFOOWNER|child info owner classification]], one can additionally show the number of documents and regular grandchildren to be expected for a child object.&lt;br /&gt;
&lt;br /&gt;
On the left side of the child page the current object´s high priority properties are shown. By clicking on a live value property, the live value details dialog opens. By clicking on an editable [[UBIK_WinX_Client_Basics#High_priority_properties| high priority property]], an editor opens {{Version/WinXSince|2.5.4}}. If a property was edited a save button is shown in the lower left corner, allowing the user to commit the changes. If a property of a query object was edited an evaluate button is shown in the lower left corner, allowing the user to run the query with the changed propery.&lt;br /&gt;
&lt;br /&gt;
=== Properties Page ===&lt;br /&gt;
&lt;br /&gt;
On the properties page, one can see a list of all the current object's visible properties, and, given the respective rights, a possibility to edit them.&lt;br /&gt;
&lt;br /&gt;
=== Context Menu ===&lt;br /&gt;
&lt;br /&gt;
For any current object, there is a set of potential context-sensitive actions. These are displayed as buttons in the title bar, with a three-dot overflow menu button aggregating all the actions that wouldn't fit there anymore. There are many potential actions; some of them are only enabled for specifically classified objects, like objects with a geo location. Default actions are refresh, various download options, child object creation, copy/paste, commit/revert changes, geo-related actions, etc.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
==== Root objects vs child objects ====&lt;br /&gt;
&lt;br /&gt;
The first entry point in the ''Content Browser'' is the list of root objects.&lt;br /&gt;
&lt;br /&gt;
==== Task objects ====&lt;br /&gt;
&lt;br /&gt;
[[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Task|Tasks]] and [[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Work_Package|work packages]] are special types of {{UBIK}} objects used for maintenance, repair and overhaul (MRO) use-cases.&lt;br /&gt;
&lt;br /&gt;
==== Query objects ====&lt;br /&gt;
&lt;br /&gt;
Queries are special types of {{UBIK}} objects with dynamic children. The child objects are looked up depending on the query object's criteria, which can be specified the same as property values for regular objects. There are [[QUERY|online queries]] evaluated by the server, and [[https://wiki.augmensys.com/index.php?title=Offline_Query_(UBIK_WinX)|offline queries]] evaluated on the client, thus requiring no internet connection.&lt;br /&gt;
&lt;br /&gt;
==== Safety relevant objects ====&lt;br /&gt;
&lt;br /&gt;
Object classified as [[SYSCLS_SAFETY_RELEVANT_OBJECT|safety relevant]] require the user to accept safety instructions to access the object, which can be required for hazardous MRO tasks, for example.&lt;br /&gt;
&lt;br /&gt;
==== Commissioning objects ====&lt;br /&gt;
&lt;br /&gt;
Similar to and based on MRO objects, commissioning objects are tasks and work packages for the commissioning use-case, e.g., [[SYSCLS_COMMISSIONINGCHECK|commissioning check tasks]].&lt;br /&gt;
&lt;br /&gt;
==== Locked objects  ====&lt;br /&gt;
In several use-cases, objects can be [[Locked_Objects|locked]] for editing.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Authentication Properties ====&lt;br /&gt;
[[SYSCLS_REQUIRE_AUTHENTICATION|Authentication Properties]] are properties which need a user authentication (through a password field) to be edited.&lt;br /&gt;
&lt;br /&gt;
==== Min max properties ====&lt;br /&gt;
See [[Min_Max_Properties]].&lt;br /&gt;
&lt;br /&gt;
==== Live value properties ====&lt;br /&gt;
[[Live_Values]] are specific property values extracted from a process control system like OPC-UA or OSIPI. &lt;br /&gt;
&lt;br /&gt;
==== High priority properties ====&lt;br /&gt;
High priority properties are properties having a priority higher than the [[Settings#Content |priority threshold]].&lt;br /&gt;
&lt;br /&gt;
==== Selective List Properties ====&lt;br /&gt;
For some properties, the user should be able to select from a predefined set of values. Such a predefined set is called a &amp;quot;selective list&amp;quot; in {{UBIK}}.&lt;br /&gt;
Furthermore, there are [[Dynamic_Selective_List_(Client)|dynamic selective lists]] that can be filtered or assembled based on dependency property values.&lt;br /&gt;
&lt;br /&gt;
{{Hint|{{Version/WinXSince|5.1.0.0}}{{Version/MobileSince|5.1.0.0}} The ItemsSource binding of related WinX/Mobile controls in Xaml now requires only '''PropertyViewModel.SelectiveItems''', which will return the items of an [[Active_List_Client|ActiveList]], or the items of a MetaProperty.SelectiveList, depending on the server-side configuration. In this case, the [[Converters_In_Mobile#List_of_Available_Converters|SelectiveListToItemsConverter]] is outdated and should not be used anymore.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
==== Properties with value records {{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
[[File:UI_WinX_PropertyWithValueRecords.png|thumb|A property with value records]]&lt;br /&gt;
[[File:UI_WinX_PropertyValueRecords.png|thumb|Property value records dialog]]&lt;br /&gt;
In addition to its value, a property might also bring along a series of value records showing &amp;quot;who changed the value at what time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When such records exist, the property row shows a special symbol on the right side. After a right click (with mouse) or a long tap (with touch) on the property row, a dialog will be shown to present these records (sorted by their time, recent ones on top).&lt;br /&gt;
&lt;br /&gt;
==== String properties with length restrictions ====&lt;br /&gt;
A string property can be configured with a [[MetaProperty#Text_2|length restriction]]. The client property editing UI doesn't allow users to confirm values exceeding the limit.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
==== [[Editors]] ====&lt;br /&gt;
&lt;br /&gt;
See [[Editors]]&lt;br /&gt;
&lt;br /&gt;
=== Documents ===&lt;br /&gt;
UBIK supports and displays document objects and a bunch of actions related to them (editing, redlining, creation, thumbnails, ...).&lt;br /&gt;
See [[Documents_(Client)|Documents (Client)]]&lt;br /&gt;
&lt;br /&gt;
==== Fit Mode{{Version/WinXSince|3.5}} ====&lt;br /&gt;
See [[Documents_(Client)#Fit_Mode|Fit Mode]]&lt;br /&gt;
&lt;br /&gt;
==== Auto zoom {{Version/WinXSince|4.6}}{{Version/XamarinSince|4.6}} ====&lt;br /&gt;
See [[Documents_(Client)#Auto_zoom|Auto zoom]]&lt;br /&gt;
&lt;br /&gt;
==== Editing{{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
See [[Documents_(Client)#Editing|Editing]]&lt;br /&gt;
&lt;br /&gt;
==== Offline availability ====&lt;br /&gt;
See [[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
==== Clear Online Documents ====&lt;br /&gt;
[[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
== AR Features ==&lt;br /&gt;
&lt;br /&gt;
=== POI View ===&lt;br /&gt;
Brings up the POI View|Augmented Reality view and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Markerless ===&lt;br /&gt;
&lt;br /&gt;
=== Map View ===&lt;br /&gt;
Opens the Map View and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
== Positioning ==&lt;br /&gt;
{{UBIK}} clients use a [[Location_Manager|Location Manager]] in order to gain knowledge about their position, so it can help the user navigate to his/her target.&lt;br /&gt;
&lt;br /&gt;
The user can choose one of different positioning modes optimized for different environments.&lt;br /&gt;
Most of them incorporate multiple technologies for calculating positions or checking their reliability.&lt;br /&gt;
&lt;br /&gt;
=== Positioning modes ===&lt;br /&gt;
&lt;br /&gt;
* ''Use all'' - uses all available position sources&lt;br /&gt;
* ''LLA only mode'' - used for positioning using markers only&lt;br /&gt;
* ''Beacon Proximity mode'' - uses iBeacon proximity and LLA only&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
&lt;br /&gt;
==== GPS ==== &lt;br /&gt;
GPS is used as a primary positioning input source for outdoor areas. Its precision depends on the environment and satellite availability. With good circumstances, the accuracy varies between 1 and 10 meters.&lt;br /&gt;
&lt;br /&gt;
==== LLA markers ==== &lt;br /&gt;
LLA markers basically are QR codes with location data encoded into them - which can be used for positioning when they are scanned.&lt;br /&gt;
&lt;br /&gt;
==== Object Proximity Positioning ====&lt;br /&gt;
The location of nearby Geo-Objects can be used for positioning.&lt;br /&gt;
&lt;br /&gt;
The position of a Geo-Object can be used manually by pushing the button {{key press|Use Location}} in the [[UBIK_WinX_Client_Basics#Context_Menu|Context Menu]]. &lt;br /&gt;
&lt;br /&gt;
The geo information of an object gets used automatically if exactly one single object is found through scanning. If more objects are found, their geo information doesn´t get used. Scanning includes  [[UBIK Client Basics#Bar Code|Bar Code]], [[UBIK Client Basics#QR Code|QR Code]], [[UBIK Client Basics#OCR|OCR]] and [[UBIK Client Basics#RFID|RFID]]. The automatic use of Geo-Object´s location can be turned off by disabling the &amp;quot;EnableObjectProximityPositioning&amp;quot; setting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beacon-Proximity Positioning ====&lt;br /&gt;
The Beacon Proximity Mode detects if the user is in the proximity of a beacon. The proximity region is defined by a proximity distance which creates a sphere around the beacon. Whenever the calculated distance to a beacon is smaller than the proximity distance, the user is supposed to be at the position of the beacon. If multiple regions intersect the user is supposed to be at the position of the nearest beacon. &lt;br /&gt;
In order to use Beacon Proximity as a Positioning System, Bluetooth Low Energy has to be available and enabled on the mobile device. If a new environment should be equipped with iBeacon-Positioning, an expert has to mount iBeacons on known positions and calibrate the propagation factor of these beacons. Proximity beacons can be configured using [[SYSCLS_PROXIMITY_BEACON]]. {{Version/WinXSince|UWP}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Finding Objects ==&lt;br /&gt;
=== Free Text Search ===&lt;br /&gt;
&lt;br /&gt;
=== ID Marker ===&lt;br /&gt;
&lt;br /&gt;
=== QR Code ===&lt;br /&gt;
&lt;br /&gt;
=== Bar Code ===&lt;br /&gt;
&lt;br /&gt;
=== RFID Code ===&lt;br /&gt;
Provides a fast and convenient way for users to find objects that are identifiable through [[RFID tags|RFID tags]].&lt;br /&gt;
&lt;br /&gt;
=== OCR ===&lt;br /&gt;
&lt;br /&gt;
== Linked objects == &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
It is possible to display values of linked objects by using the &amp;quot;LinkedLevel&amp;quot; property. An example can be seen here, where Items[0] is a Guid property linking to another object. The ItemsControl then binds to the Properties of the linked object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid DataContext=&amp;quot;{Binding Properties.Items[0].LinkedLevel}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ItemsControl ItemsSource=&amp;quot;{Binding Properties.AllItems}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Client_Feature_Table]]&lt;br /&gt;
* [[SYSCLS_DOCUMENT_FITMODE]]&lt;br /&gt;
* [[SYSCLS_SHOWDOCUMENTS]]&lt;br /&gt;
* [[SYSCLS_SHOWPROPERTIES]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29746</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29746"/>
				<updated>2026-04-27T13:34:58Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* XAML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
==Introduction {{Version/WinXSince|5.1.0.0}}{{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList. For more information about Active Lists follow [[UBIK_Active_Lists|this link]].}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. The following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it should be changed to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''after the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''before the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItems}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''after the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''before the change:'''&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Attention|When binding to ''SelectiveItems'', the ''SelectiveListToItemsConverter'' is outdated and should not be used anymore. Further info see [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]].}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29745</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29745"/>
				<updated>2026-04-27T13:31:01Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Introduction {{Version/WinXSince|5.1.0.0}} {{Version/MobileSince|5.1.0.0}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
==Introduction {{Version/WinXSince|5.1.0.0}}{{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList. For more information about Active Lists follow [[UBIK_Active_Lists|this link]].}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. The following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it should be changed to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI) before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItems}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Attention|When binding to ''SelectiveItems'', the ''SelectiveListToItemsConverter'' is outdated and should not be used anymore. Further info see [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]].}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29744</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29744"/>
				<updated>2026-04-27T13:08:16Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* XAML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
==Introduction {{Version/WinXSince|5.1.0.0}} {{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList.}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. The following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it should be changed to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI) before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItems}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Attention|When binding to ''SelectiveItems'', the ''SelectiveListToItemsConverter'' is outdated and should not be used anymore. Further info see [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]].}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29743</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29743"/>
				<updated>2026-04-27T12:59:30Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* XAML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
==Introduction {{Version/WinXSince|5.1.0.0}} {{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList.}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. As also mentioned [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]], the following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it should be changed to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI) before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItems}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Attention|When binding to ''SelectiveItems'', the ''SelectiveListToItemsConverter'' is outdated and should not be used anymore. Further info see [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]].}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29742</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29742"/>
				<updated>2026-04-27T12:57:56Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* XAML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
==Introduction {{Version/WinXSince|5.1.0.0}} {{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList.}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. As also mentioned [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]], the following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it should be changed to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI) before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItems}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|When binding to ''SelectiveItems'', the ''SelectiveListToItemsConverter'' is outdated and should not be used anymore. Further info see [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]].}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29741</id>
		<title>Version 5.1 (Mobile)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29741"/>
				<updated>2026-04-27T12:51:53Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|Existing pre 5.0 XAMLs are not compatible with UBIK Mobile client 5.1. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|UBIK 5 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|The minimum supported OS versions are:&lt;br /&gt;
* Android 9;&lt;br /&gt;
* iOS 12.}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Preview}}: Available through Google Play Store's [https://play.google.com/store/apps/details?id=com.augmensys.ubik.go invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/Kmb1HG9E invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Preview}}: Available through Apple App Store's [https://testflight.apple.com/join/yHRnbYbt invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|Windows: Store Preview}}: The mobile Windows client is not an official product and is only distributed as test versions upon request and/or in our [https://release.augmensys.com/download/modules/client/mobile/ release portal].&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
* The system flashlight can now also be enabled or disabled via XAML customization. For detailed information, see [[Mobile XAML#Flashlight|Flashlight]]&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* [[MRO_Objects_(Client)#Signature_Task|MRO Signature Tasks]] have been introduced, which automatically displays the signee as well as the validation timestamp after the task has been signed.&lt;br /&gt;
* Fixed an issue where changes in property editing were not discarded when using the default Back button.&lt;br /&gt;
* Fixed an issue where the application crashed on Windows when navigating back from the VideoPlayer.&lt;br /&gt;
* Icon set Addition 8: Added Show/Hide, AI, Info, and various Procedure icons.&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where MRO task items displayed an incorrect DataTemplate after scrolling within a list.&lt;br /&gt;
* Fixed an issue where the client could fail at large file uploads (or even crash) due to device running out of memory.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems. The standard UI is not yet redesigned to show multi-line texts, though. But you can do so in customizing if necessary.&lt;br /&gt;
* Introduced a new [[Active_List_Client|Active List]], which is like a selective list on instance level. It is also used as the source for the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.30 2026-03-02 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.29 on 2026-02-26 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue where the POI button was only visible under certain condition (ShowUnreleasedFeatures in the profile is set to true).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.28 on 2026-02-10 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* The following features which existed in pre 5.0 versions are now available again in 5.1.&lt;br /&gt;
** [[Map_View|Map view]].&lt;br /&gt;
** [[POI_View_(Mobile)|POI view]]. (Aruco and OCR are not yet supported)&lt;br /&gt;
** Location service.&lt;br /&gt;
** [[Native_Push_(Client)|Native push]].&lt;br /&gt;
** [[Charts]].&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Complete UI overhaul introduces a cleaner, more modern and adaptive user interface with various quality of life improvements.&lt;br /&gt;
* UBIKTabView supports both dynamic and static items in combination with lazy loading.&lt;br /&gt;
* Files in the app's data folder can now be opened or deleted directly in the developer settings.&lt;br /&gt;
* Introduced a fully resource-driven UI theming system enabling fast, safe customization (dark mode, resizing, and consistent styling) by adapting a small set of centralized resources.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* Fixed an issue where remembered scroll positions were lost when the ItemsSource property of an SfListViewExt changed (e.g., Properties.ShowAllProperties).&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed issue that caused app to be stuck on splash screen after resuming from background.&lt;br /&gt;
* Fixed an issue where StatusColor was not shown in the UI for objects that didn't additionally have a Progress.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Fixed an issue that caused content of the custom ContentControl to not be rendered sometimes.&lt;br /&gt;
* (Android) Fixed an issue in the WebView where some links could not be opened.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the deletion of some objects was not reflected in the UI until refresh.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true. In Mobile, deleting the last annotation does not correctly update the editor's internal edit state. As a result, the Save button may remain visible even though no edits exist.&lt;br /&gt;
* When changing the device orientation during attaching a photo on iOS, the app gets stuck. This is an issue Microsoft confirmed in .NET9 and will fix in .NET10.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
* The periodic execution of background pushes is not guaranteed on iOS (the native push feature doesn't have this issue).&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* It is currently not possible to select which camera to use for AR views (e.g. scan page) on Windows.&lt;br /&gt;
* SfPullToRefresh was removed due to [[Mobile_XAML#Issues_with_SfPullToRefresh_in_Mobile_client|existing issues]], and replaced with a Refresh option in the Context menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
* Due to the change of the underlying XAML technology, the existing XAMLs for the old mobile clients (pre 5.0) are no longer compatible. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.&lt;br /&gt;
* There are some XAML changes necessary when using the new [[Active_List_Client|Active List]] feature, or when using the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]]. These XAML changes are explained [[Active_List_Client#XAML|here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(WinX)&amp;diff=29740</id>
		<title>Version 5.1 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(WinX)&amp;diff=29740"/>
				<updated>2026-04-27T12:51:17Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|This version requires [https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1809_(October_2018_Update) Windows 10 build 17763] or higher}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Store}}: Publicly available in Microsoft Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Store Beta}} / {{key press|Store Preview}}: Publicly available in Microsoft Store as beta or preview versions to those whose account email is participating in our beta or preview test. To join, please send an email to testing@augmensys.com and provide an email address to add to the list as well as the information which test you want to join. Alternatively you can contact the Augmensys staff and submit your chosen email address.&lt;br /&gt;
&lt;br /&gt;
Example: Please add my email account example@example.com to the '''Beta''' test group for the '''WinX''' client.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? on 2026-??-?? ===&lt;br /&gt;
* Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* Provided a visual difference between suggested and actual values in DateTime and Geo property direct edit fields via a [[XAML#Custom_VisualState_Trigger|Custom VisualState Trigger]].&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems.&lt;br /&gt;
* Introduced a new [[Active_List_Client|Active List]], which is like a selective list on instance level. It is also used as the source for the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.9 on 2026-04-22 ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.6 on 2026-02-10 ===&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where certain documents couldn't be loaded anymore.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed an issue where the UI did not update properly when committing a direct edit input task.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Added a [[XAML#UBIKWebView|UBIKWebView]] control that includes a fix in the WebView2 where some links could not be opened.&lt;br /&gt;
* Fixed issue that caused input fields to be focused but not editable.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Free Text Annotations that where created in former sessions cannot be selected and therefore cannot be edited any more.&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* Known issues regarding the [[Documents_(Client)#Remember_Document_Settings|Remember Document Settings]] feature:&lt;br /&gt;
** Saving the Zoom value via touch gestures is not supported.&lt;br /&gt;
** Due to a third-party framework issue it can't be guaranteed that saving the Zoom level is always working properly. We reported this issue and will update our solution as soon as it is resolved on their side.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
* There are some XAML changes necessary when using the new [[Active_List_Client|Active List]] feature, or when using the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]]. These XAML changes are explained [[Active_List_Client#XAML|here]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (WinX)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 5.1 (WinX)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29739</id>
		<title>Version 5.1 (Mobile)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(Mobile)&amp;diff=29739"/>
				<updated>2026-04-27T12:44:06Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|Existing pre 5.0 XAMLs are not compatible with UBIK Mobile client 5.1. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|UBIK 5 clients can only connect to {{UBIK}} Servers of [[Version 3.6(Server)|version 3.6]] and higher!}}&lt;br /&gt;
&lt;br /&gt;
{{Attention|The minimum supported OS versions are:&lt;br /&gt;
* Android 9;&lt;br /&gt;
* iOS 12.}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Android: Store}}{{key press|iOS: Store}}: Publicly available in Google Play Store / Apple App Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Beta}}: Publicly available in Google Play Store as beta versions. You can opt in or out of the beta at any time in the store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Android: Store Preview}}: Available through Google Play Store's [https://play.google.com/store/apps/details?id=com.augmensys.ubik.go invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Beta}}: Available through Apple App Store's [https://testflight.apple.com/join/Kmb1HG9E invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|iOS: Store Preview}}: Available through Apple App Store's [https://testflight.apple.com/join/yHRnbYbt invitation link].&lt;br /&gt;
&lt;br /&gt;
{{key press|Windows: Store Preview}}: The mobile Windows client is not an official product and is only distributed as test versions upon request and/or in our [https://release.augmensys.com/download/modules/client/mobile/ release portal].&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with a ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? 2026-??-?? {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
* The system flashlight can now also be enabled or disabled via XAML customization. For detailed information, see [[Mobile XAML#Flashlight|Flashlight]]&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* [[MRO_Objects_(Client)#Signature_Task|MRO Signature Tasks]] have been introduced, which automatically displays the signee as well as the validation timestamp after the task has been signed.&lt;br /&gt;
* Fixed an issue where changes in property editing were not discarded when using the default Back button.&lt;br /&gt;
* Fixed an issue where the application crashed on Windows when navigating back from the VideoPlayer.&lt;br /&gt;
* Icon set Addition 8: Added Show/Hide, AI, Info, and various Procedure icons.&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where MRO task items displayed an incorrect DataTemplate after scrolling within a list.&lt;br /&gt;
* Fixed an issue where the client could fail at large file uploads (or even crash) due to device running out of memory.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems. The standard UI is not yet redesigned to show multi-line texts, though. But you can do so in customizing if necessary.&lt;br /&gt;
* Introduced a new [[Active_List_Client|Active List]], which is like a selective list on instance level. It is also used as the source for the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
=== 5.1.30 2026-03-02 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.29 on 2026-02-26 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* Fixed an issue where the POI button was only visible under certain condition (ShowUnreleasedFeatures in the profile is set to true).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.28 on 2026-02-10 {{key press|Android: Store}}{{key press|iOS: Store}} ===&lt;br /&gt;
* The following features which existed in pre 5.0 versions are now available again in 5.1.&lt;br /&gt;
** [[Map_View|Map view]].&lt;br /&gt;
** [[POI_View_(Mobile)|POI view]]. (Aruco and OCR are not yet supported)&lt;br /&gt;
** Location service.&lt;br /&gt;
** [[Native_Push_(Client)|Native push]].&lt;br /&gt;
** [[Charts]].&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Complete UI overhaul introduces a cleaner, more modern and adaptive user interface with various quality of life improvements.&lt;br /&gt;
* UBIKTabView supports both dynamic and static items in combination with lazy loading.&lt;br /&gt;
* Files in the app's data folder can now be opened or deleted directly in the developer settings.&lt;br /&gt;
* Introduced a fully resource-driven UI theming system enabling fast, safe customization (dark mode, resizing, and consistent styling) by adapting a small set of centralized resources.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* Fixed an issue where remembered scroll positions were lost when the ItemsSource property of an SfListViewExt changed (e.g., Properties.ShowAllProperties).&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed issue that caused app to be stuck on splash screen after resuming from background.&lt;br /&gt;
* Fixed an issue where StatusColor was not shown in the UI for objects that didn't additionally have a Progress.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Fixed an issue that caused content of the custom ContentControl to not be rendered sometimes.&lt;br /&gt;
* (Android) Fixed an issue in the WebView where some links could not be opened.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the deletion of some objects was not reflected in the UI until refresh.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true. In Mobile, deleting the last annotation does not correctly update the editor's internal edit state. As a result, the Save button may remain visible even though no edits exist.&lt;br /&gt;
* When changing the device orientation during attaching a photo on iOS, the app gets stuck. This is an issue Microsoft confirmed in .NET9 and will fix in .NET10.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Currently, the Samsung keyboard doesn't show {{key press|,}} at all, regardless of the current language/locale setting of the device. Please use a different virtual keyboard (e.g. Gboard from Google) instead if {{key press|.}} is unacceptable.&lt;br /&gt;
* The periodic execution of background pushes is not guaranteed on iOS (the native push feature doesn't have this issue).&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* It is currently not possible to select which camera to use for AR views (e.g. scan page) on Windows.&lt;br /&gt;
* SfPullToRefresh was removed due to [[Mobile_XAML#Issues_with_SfPullToRefresh_in_Mobile_client|existing issues]], and replaced with a Refresh option in the Context menu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
Due to the change of the underlying XAML technology, the existing XAMLs for the old mobile clients (pre 5.0) are no longer compatible. Please refer to [[HowTo:Convert_Xamarin_XAMLs_to_Maui]] for migrating them to the new client.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Mobile|Version 5.1 (Mobile)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (Mobile)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Version_5.1_(WinX)&amp;diff=29738</id>
		<title>Version 5.1 (WinX)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Version_5.1_(WinX)&amp;diff=29738"/>
				<updated>2026-04-27T12:43:47Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* 5.1.?? on 2026-??-?? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Attention|This version requires [https://en.wikipedia.org/wiki/Windows_10_version_history#Version_1809_(October_2018_Update) Windows 10 build 17763] or higher}}&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
{{key press|Store}}: Publicly available in Microsoft Store.&lt;br /&gt;
&lt;br /&gt;
{{key press|Store Beta}} / {{key press|Store Preview}}: Publicly available in Microsoft Store as beta or preview versions to those whose account email is participating in our beta or preview test. To join, please send an email to testing@augmensys.com and provide an email address to add to the list as well as the information which test you want to join. Alternatively you can contact the Augmensys staff and submit your chosen email address.&lt;br /&gt;
&lt;br /&gt;
Example: Please add my email account example@example.com to the '''Beta''' test group for the '''WinX''' client.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
{{Attention|Some customized XAMLs might need an update to work properly. These changes are marked with ⚠️}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Release Notes =&lt;br /&gt;
&lt;br /&gt;
== Release ==&lt;br /&gt;
=== 5.1.?? on 2026-??-?? ===&lt;br /&gt;
* Introduced a new [[MRO_Objects_(Client)#Picture_Task|picture task]] type which can only be finished when there's at least one valid child document.&lt;br /&gt;
* Replaced app closing after repeated failed login attempts with a client-side temporary login block, including user feedback that indicates when login becomes available again.&lt;br /&gt;
* Added French localization to the app.&lt;br /&gt;
* Provided a visual difference between suggested and actual values in DateTime and Geo property direct edit fields via a [[XAML#Custom_VisualState_Trigger|Custom VisualState Trigger]].&lt;br /&gt;
* Fixed an issue where the [[Object_hierarchy_in_XAML:_NextLevel,_ParentLevel,_LinkedLevel#LoadNextLevelCommand|LoadNextLevelCommand]] did not work under specific conditions (invoked in offline and then in online mode).&lt;br /&gt;
* Fixed an issue where [[SYSCLS_CHILDINFOOWNER|child count]] indicators did not update when you delete its child objects which only exist locally.&lt;br /&gt;
* Fixed an issue where line breaks (in strings property values) from Windows are not recognized as such on other systems.&lt;br /&gt;
* Introduced a new [[Active_List_Client|Active List]], which is like a selective list on instance level. It is also used as the source for the new [[MRO_Objects_%28Client%29#Pick_List_Task|MRO Pick List Task]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (WinX)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 5.1 (WinX)]]&lt;br /&gt;
&lt;br /&gt;
=== 5.1.9 on 2026-04-22 ===&lt;br /&gt;
* Fixed an issue that prevented any documents from being uploaded when connecting to 5.1 webservices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 5.1.6 on 2026-02-10 ===&lt;br /&gt;
* UBIK now uses industry-standard JSON Web Token (JWT) technology for authorization, enhancing security and reliability. Session tokens are transmitted via HTTP headers instead of URLs for improved protection.&lt;br /&gt;
* Added support for conditionally showing the ImageEditor Save button only when edits have been made, enabled when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* Added support for [[File_Upload_Size_Restriction|configurable file-upload size restrictions]], preventing oversized files from being uploaded and providing users with feedback when limits are exceeded.&lt;br /&gt;
* Fixed an issue where certain documents couldn't be loaded anymore.&lt;br /&gt;
* Fixed an issue where annotated image documents do not appear as changed until the UI refreshes.&lt;br /&gt;
* Fixed an issue where displayed file content does not update after you revert its changes.&lt;br /&gt;
* The UI now updates correctly after mass deletion in multi-selection mode.&lt;br /&gt;
* Fixed an issue where the UI did not update properly when committing a direct edit input task.&lt;br /&gt;
* Fixed an issue where toggling NA in the String Editor did not behave correctly.&lt;br /&gt;
* Fixed an issue where the Chart Thresholds didn't update.&lt;br /&gt;
* Added a [[XAML#UBIKWebView|UBIKWebView]] control that includes a fix in the WebView2 where some links could not be opened.&lt;br /&gt;
* Fixed issue that caused input fields to be focused but not editable.&lt;br /&gt;
* Fixed an issue where document creation might not be properly enabled in certain customizing scenarios. For example, a media creation button might be disabled until a page refresh.&lt;br /&gt;
* Fixed an issue where batch creating documents (by multi selecting files to attach) can be interrupted if you leave the page.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Known issues ==&lt;br /&gt;
* Due to third-party limitations, the feature that shows the ImageEditor Save button only when edits have been made is only active when MergeAnnotationsOnSave is set to true.&lt;br /&gt;
* When editing Guid Link properties, you can no longer further edit the filtering if there are predefined filter parameters (such as the [[Dynamic_Selective_List_(Client)#Dependency_property_values|dependency property values in dynamic selective lists]]). This is because those parameters are to be enforced by design and should not be changed by users. In the future, we might consider a finer level of control over which parameters can be edited in such cases.&lt;br /&gt;
* Free Text Annotations that where created in former sessions cannot be selected and therefore cannot be edited any more.&lt;br /&gt;
* There are still some [[Annotation_and_HotSpot#Known_issues|known issues with free text and text markup annotations]].&lt;br /&gt;
* Known issues regarding the [[Documents_(Client)#Remember_Document_Settings|Remember Document Settings]] feature:&lt;br /&gt;
** Saving the Zoom value via touch gestures is not supported.&lt;br /&gt;
** Due to a third-party framework issue it can't be guaranteed that saving the Zoom level is always working properly. We reported this issue and will update our solution as soon as it is resolved on their side.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= ⚠️ XAML Notes =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;headertabs /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Category/Version2|{{PAGENAME}}}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Version 5.1 (WinX)]]&lt;br /&gt;
[[Category:Version 5.1|Version 5.1 (WinX)]]&lt;br /&gt;
[[Category:WinX|Version 5.1 (WinX)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Multi_Select_(UBIK_Client)&amp;diff=29737</id>
		<title>Multi Select (UBIK Client)</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Multi_Select_(UBIK_Client)&amp;diff=29737"/>
				<updated>2026-04-27T11:06:12Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Editing common properties of selected items (UWP only) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Multi Select mode aims to improve the efficiency of performing actions on a large number of selected objects (Mobile &amp;amp; UWP), as well as changing property values for a large number of selected objects (UWP only). Editing property values for a large number of objects was known in some previous UWP versions as Mass Editing. Currently, the Multi Select mode is available for lists of children (including task and query objects) and documents.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Activating the multi select mode ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
Clicking on a Multi Select button, which will appear when hovering over a list, activates the Multi Select mode. A panel at the left side gets displayed.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile&amp;quot;&amp;gt;&lt;br /&gt;
The Multi Select mode gets enabled by holding (long tapping) an item. As soon as it is active, a panel on the bottom gets displayed.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In XAML code, you can use &amp;lt;code&amp;gt;ListViewModel.BulkOperation.ToggleMultiSelectCommand&amp;lt;/code&amp;gt; to (de)activate the multi select mode.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Multi select panel ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
The header displays the count of the currently selected items and three buttons.&lt;br /&gt;
The first one is for selecting all items, the second for deselecting all items at one click. The {{key press|x}} button closes the panel and deactivates the Multi Select mode.&lt;br /&gt;
Further, the panel contains two tabs.&lt;br /&gt;
The &amp;quot;properties&amp;quot; tab displays all common editable properties of the selected items. If none are selected, or if the selected items don't share any common properties, it will remain empty.&lt;br /&gt;
The &amp;quot;other options&amp;quot; tab contains buttons to perform actions on all selected items.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile&amp;quot;&amp;gt;&lt;br /&gt;
The Multi Select panel in the Mobile client is located at the bottom.&lt;br /&gt;
It displays the count of selected items, command buttons for Copy, Discard, Delete and Download actions and a close button to deactivate the Multi Select mode.&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:UBIKWinXUI_MultiSelect1.JPG|thumb|Multi Select mode (UWP)]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Hint|Note: Please only use the buttons in the Multi Select Panel to perform actions on the selected objects. Others, like content area / context menu button actions are still related to the content page and do not work for the selected objects.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For the current usecase and the standard client, the Multi Select mode can be activated for Document and Children objects in parallel, hence when activating the Multi Select mode in the Children tab and then switching to Documents tab, it is possible to enable a separate Multi Select panel there.&lt;br /&gt;
&lt;br /&gt;
By navigating away from the related content page, all active Multi Select modes get deactivated automatically.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Selection ==&lt;br /&gt;
&lt;br /&gt;
[[File:UBIKCPLXUI_MultiSelect1.JPG|thumb|Multi Select mode (Mobile)]]&lt;br /&gt;
&lt;br /&gt;
By default, all objects are deselected when the Multi Select Mode gets invoked. Items can be selected by tapping on them. Therefore, navigating into an object in the list by tapping on it is no longer available. To be able to navigate again, the Multi Select mode needs to be turned off.&lt;br /&gt;
&lt;br /&gt;
To select or deselect all items, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.SelectAllCommand&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;ListViewModel.BulkOperation.DeselectAllCommand&amp;lt;/code&amp;gt; can be used as command binding. These options are currently not presented in the standard Mobile UI.&lt;br /&gt;
&lt;br /&gt;
In UWP, there are some additional selection related options besides &amp;quot;Select All&amp;quot; and &amp;quot;Deselect All&amp;quot;. Selecting or deselecting a bunch of items in a row can be achieved by holding shift and first clicking on the first required item and then clicking on the last required item.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Performing actions on selected items ==&lt;br /&gt;
&lt;br /&gt;
The following actions are currently available in Multi Select mode:&lt;br /&gt;
* Copy / Paste&lt;br /&gt;
* Download Branches&lt;br /&gt;
* Discard Content&lt;br /&gt;
* Delete Content&lt;br /&gt;
* Download and Checkout (*)&lt;br /&gt;
* Checkout (*)&lt;br /&gt;
* Release (*)&lt;br /&gt;
* Revert local changes (*)&lt;br /&gt;
&lt;br /&gt;
Actions marked with (*) are currently not presented in the standard Mobile UI. But they can be easily customized in XAML code with the following commands.&lt;br /&gt;
&lt;br /&gt;
=== Copy and paste ===&lt;br /&gt;
To copy multiple branches, the &amp;lt;code&amp;gt;ListViewModel.BulkOperation.CopyBranchesCommand&amp;lt;/code&amp;gt; can be used without any additional CommandParameters.&lt;br /&gt;
The &amp;lt;code&amp;gt;ContentViewModel.PasteBranchCommand&amp;lt;/code&amp;gt; already supports pasting multiple branches, therefore, it can be used to paste the previously copied objects. To clarify, the UI (Mobile &amp;amp; UWP) does not include pasting content into the selected objects, rather pasting multiple, previously copied branches into one object. This can be done eg. via the Paste option in the Context Menu.&lt;br /&gt;
&lt;br /&gt;
=== Download branches ===&lt;br /&gt;
To download multiple branches, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;BranchDownloadCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
=== Discard content ===&lt;br /&gt;
To discard selected objects, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;DiscardContentCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
=== Delete content ===&lt;br /&gt;
To delete selected objects, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;DeleteContentCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
=== Download and checkout ===&lt;br /&gt;
This can be achieved by using the command for downloading, just with an additional KeyValueParameter to set the &amp;lt;code&amp;gt;Key=&amp;quot;CheckOut&amp;quot;&amp;lt;/code&amp;gt; to &amp;quot;True&amp;quot; as CommandParameter:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Button ... Command=&amp;quot;{Binding ListViewModel.BulkOperation.InvokeOnItemsCommand}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
        &amp;lt;controls:KeyValueList&amp;gt;&lt;br /&gt;
            &amp;lt;controls:KeyValueParameter Key=&amp;quot;Command&amp;quot; Value=&amp;quot;BranchDownloadCommand&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;controls:KeyValueParameter Key=&amp;quot;CheckOut&amp;quot; Value=&amp;quot;True&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/controls:KeyValueList&amp;gt;&lt;br /&gt;
    &amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Checkout ===&lt;br /&gt;
To checkout selected objects, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;CheckOutContentCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
=== Release ===&lt;br /&gt;
To release selected objects, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;ReleaseContentCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
=== Revert local changes ===&lt;br /&gt;
To revert local changes on objects, &amp;lt;code&amp;gt;ListViewModel.BulkOperation.InvokeOnItemsCommand&amp;lt;/code&amp;gt; with a KeyValueList containing &amp;lt;code&amp;gt;Key=&amp;quot;Command&amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;Value=&amp;quot;RevertLocalChangesCommand&amp;quot;&amp;lt;/code&amp;gt; as CommandParameter can be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Editing common properties of selected items (UWP only) ==&lt;br /&gt;
&lt;br /&gt;
When selecting or deselecting objects, the commonly shared properties on the left side are constantly updated during that process.&lt;br /&gt;
&lt;br /&gt;
{{Hint|For such a property, if all selected objects share the same property value, that value is displayed as it is; Otherwise, &amp;quot;...&amp;quot; is displayed to indicate the presence of various values.}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once a user clicks/taps on such a property, an editor dialog is shown and the user can enter values just like when editing properties of single objects. However, when the user finishes editing and confirms the dialog, the value is saved to that property of all selected objects immediately.&lt;br /&gt;
&lt;br /&gt;
{{Hint|If the property being edited has various values, a default value (instead of the actual ones) is shown in the editor. E.g. empty for string type, false for boolean type, etc.}}&lt;br /&gt;
&lt;br /&gt;
Further editing of Link properties is currently not supported for multiple objects. Although the related button in the Guid editor dialog is clickable, it is currently inoperable. Also the ''Skipping the dialog'' feature (see [https://wiki.augmensys.com/index.php?title=Editors#Guid_editor| Guid Editor Wiki]) is currently not supported in Multi Select mode.&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
{{Attention|Mass editing is currently not supported for Properties containing [[Active_List_Client|Active Lists]].}}&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:Mobile|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:Version 4.3|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:WinX|Mass Edit (UBIK WinX)]]&lt;br /&gt;
[[Category:XAML|Multi Select (UBIK Client)]]&lt;br /&gt;
&lt;br /&gt;
== Multi select for filtered lists ==&lt;br /&gt;
&lt;br /&gt;
In the standard UI, multi selection targets the original unfiltered lists. However, those lists are often presented in several filtered lists in many cases. See content filtering in [[XAML_Changes_in_UBIK_WinX_3.5#Filtering_by_expressions|UWP]] and in [[Xamarin_XAML#Content_filtering|Mobile]].&lt;br /&gt;
&lt;br /&gt;
The multi select related XAML code (essentially &amp;lt;code&amp;gt;ListViewModel.BulkOperation&amp;lt;/code&amp;gt;) in the standard UI can not be used directly in such scenarios. Because all filtered lists share the same original source list (&amp;lt;code&amp;gt;ListViewModel&amp;lt;/code&amp;gt;). If the multi select feature is turned on from the original source list, all filtered lists will be affected.&lt;br /&gt;
&lt;br /&gt;
For example, a source list can be divided into two filtered lists, one for finished tasks and the other for the unfinished ones. If you use the &amp;lt;code&amp;gt;ListViewModel.BulkOperation.SelectAllCommand&amp;lt;/code&amp;gt;, it will select all tasks even though in the UI it will appear as if only those finished/unfinished are selected.&lt;br /&gt;
&lt;br /&gt;
To avoid such a situation, the multi select feature should be turned on from the filtered lists instead. This means the following types:&lt;br /&gt;
* UWP: ListCollectionView;&lt;br /&gt;
* Mobile: SfDataSourceExt.&lt;br /&gt;
&lt;br /&gt;
Here's also an example of multi select related XAML code adapted for a filtered list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid&lt;br /&gt;
     xmlns:cv=&amp;quot;using:UBIK.WinX.UI.CollectionView&amp;quot;&lt;br /&gt;
     xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
     xmlns:interactivity=&amp;quot;using:Microsoft.Xaml.Interactivity&amp;quot;&lt;br /&gt;
     xmlns:core=&amp;quot;using:Microsoft.Xaml.Interactions.Core&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;Grid.Resources&amp;gt;&lt;br /&gt;
      &amp;lt;x:String x:Key=&amp;quot;FilterExpression&amp;quot;&amp;gt;Item.Header.ToLower().Contains(&amp;amp;quot;1&amp;amp;quot;)==true&amp;lt;/x:String&amp;gt;&lt;br /&gt;
      &amp;lt;cv:ListCollectionView x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource FilterExpression}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/Grid.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;!--  Multi Select Panel  --&amp;gt;&lt;br /&gt;
    &amp;lt;ContentControl&lt;br /&gt;
        ...&lt;br /&gt;
        ContentTemplate=&amp;quot;{Binding TemplateService[UBIKMultiSelectPanel]}&amp;quot;&lt;br /&gt;
        DataContext=&amp;quot;{StaticResource FilteredList}&amp;quot;&lt;br /&gt;
        Visibility=&amp;quot;{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource EqualToVisConverter}, ConverterParameter=Multiple, FallbackValue=Collapsed, TargetNullValue=Collapsed}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentControl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;!--  Filtered List  --&amp;gt;&lt;br /&gt;
    &amp;lt;controls:SelectionBoundListView&lt;br /&gt;
        IsItemClickEnabled=&amp;quot;False&amp;quot;&lt;br /&gt;
        ItemsSource=&amp;quot;{StaticResource FilteredList}&amp;quot;&lt;br /&gt;
        SelectionMode=&amp;quot;{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource ChildItemSelectionModeToListViewSelectionModeConverter}}&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
        &amp;lt;core:EventTriggerBehavior EventName=&amp;quot;SelectionChanged&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;core:InvokeCommandAction Command=&amp;quot;{Binding BulkOperation.ItemSelectionChangedCommand, Source={StaticResource FilteredList}}&amp;quot; InputConverter=&amp;quot;{StaticResource SelectionChangedEventArgsConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/core:EventTriggerBehavior&amp;gt;&lt;br /&gt;
      &amp;lt;/interactivity:Interaction.Behaviors&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:SelectionBoundListView&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;!--  Multi Select Toggle Button  --&amp;gt;&lt;br /&gt;
    &amp;lt;Button&lt;br /&gt;
        ...&lt;br /&gt;
        Command=&amp;quot;{Binding BulkOperation.ToggleMultiSelectCommand, Source={StaticResource FilteredList}}&amp;quot;&lt;br /&gt;
        Visibility=&amp;quot;{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource EqualToVisConverter}, ConverterParameter=None}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile(Xamarin)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid&lt;br /&gt;
     xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&lt;br /&gt;
     xmlns:behaviors=&amp;quot;clr-namespace:UBIK.CPL.Behaviors;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;x:String x:Key=&amp;quot;Expresssion&amp;quot;&amp;gt;Item.Header.ToLower().Contains(&amp;amp;quot;1&amp;amp;quot;)==false&amp;lt;/x:String&amp;gt;&lt;br /&gt;
            &amp;lt;controls:SfDataSourceExt x:Key=&amp;quot;FilteredList&amp;quot; Expression=&amp;quot;{StaticResource Expresssion}&amp;quot; ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot; Unloaded=&amp;quot;{Binding SkipFiltering}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;!-- Filtered List --&amp;gt;&lt;br /&gt;
    &amp;lt;controls:SfListViewExt&lt;br /&gt;
        ...&lt;br /&gt;
        ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource FilteredList}}&amp;quot;&lt;br /&gt;
        SelectionGesture=&amp;quot;Tap&amp;quot;&lt;br /&gt;
        SelectionMode=&amp;quot;{Binding BulkOperation.ItemSelectionMode, Source={StaticResource FilteredList}, Converter={StaticResource SelectionModeConverter}}&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;controls:SfListViewExt.Behaviors&amp;gt;&lt;br /&gt;
            &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;SelectionChanged&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:InvokeCommandAction Command=&amp;quot;{Binding BulkOperation.ItemSelectionChangedCommand, Source={StaticResource FilteredList}}&amp;quot; Converter=&amp;quot;{StaticResource SelectionChangedEventArgsConverter}&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
            ...&lt;br /&gt;
            &amp;lt;behaviors:EventHandlerBehavior EventName=&amp;quot;ItemHolding&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;behaviors:InvokeCommandAction Command=&amp;quot;{Binding BulkOperation.ToggleMultiSelectCommand, Source={StaticResource FilteredList}}&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/behaviors:EventHandlerBehavior&amp;gt;&lt;br /&gt;
        &amp;lt;/controls:SfListViewExt.Behaviors&amp;gt;&lt;br /&gt;
    &amp;lt;/controls:SfListViewExt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;!-- Multi Select Panel --&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView&lt;br /&gt;
        ...&lt;br /&gt;
        BindingContext=&amp;quot;{StaticResource FilteredList}&amp;quot;&lt;br /&gt;
        ControlTemplate=&amp;quot;{StaticResource UBIKMultiSelectTemplate}&amp;quot;&lt;br /&gt;
        IsVisible=&amp;quot;{Binding BulkOperation.ItemSelectionMode, Converter={StaticResource EqualityToBool}, ConverterParameter=Multiple, FallbackValue=false, TargetNullValue=false}&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Hint|The critical part is that wherever the &amp;lt;code&amp;gt;BulkOperation&amp;lt;/code&amp;gt; property is accessed, it must be accessed from the &amp;lt;code&amp;gt;FilteredList&amp;lt;/code&amp;gt;, not the original unfiltered &amp;lt;code&amp;gt;Children.Items&amp;lt;/code&amp;gt; collection. When all references have been updated, the only remaining reference to 'Children' should be in FilteredList, as the ItemsSource attribute.}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:Mobile|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:Version 4.3|Multi Select (UBIK Client)]]&lt;br /&gt;
[[Category:WinX|Mass Edit (UBIK WinX)]]&lt;br /&gt;
[[Category:XAML|Multi Select (UBIK Client)]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Category:ActiveList&amp;diff=29729</id>
		<title>Category:ActiveList</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Category:ActiveList&amp;diff=29729"/>
				<updated>2026-04-27T07:52:10Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=UBIK_Active_Lists&amp;diff=29728</id>
		<title>UBIK Active Lists</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=UBIK_Active_Lists&amp;diff=29728"/>
				<updated>2026-04-27T07:50:37Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UBIK}} ActiveLists provide the possibility to configure instance-specific lists for integer MetaProperties.&lt;br /&gt;
&lt;br /&gt;
= Purpose =&lt;br /&gt;
In some cases it is required to define a list of selectable values for an integer MetaProperty that is specific to a single instance rather than globally defined at the MetaClass level. For example, two instances of the same MetaClass can offer different selectable values for the same MetaProperty.&lt;br /&gt;
&lt;br /&gt;
{{UBIK}} ActiveLists are the representation of such lists. They update dynamically on the client side without requiring an ACM rebuild and can be maintained per instance through server methods.&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
If a MetaProperty has both a SelectiveList and an ActiveList, the ActiveList takes precedence when data is displayed on the client, and the SelectiveList is ignored.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Client Behavior =&lt;br /&gt;
When the user opens an ActiveList:&lt;br /&gt;
* The label for each option is shown in the language configured on the web service. If a translation for the configured language is unavailable, the label is displayed in the default language.&lt;br /&gt;
* Each option in the ActiveList has an associated unique integer value that is set to the MetaProperty when selected.&lt;br /&gt;
* Only one option can be selected at a time. Selecting an option updates the MetaProperty value immediately.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sorting of items in the dropdown:&lt;br /&gt;
&lt;br /&gt;
* If all options in the ActiveList have unique sort order values, they are displayed in ascending order of these sort order values.&lt;br /&gt;
* If sort orders are not unique, options with the same sort order are sorted in ascending order by their label.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For more details see: [[Active List Client]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
= Server-Side Concept =&lt;br /&gt;
ActiveLists are stored in serialized JSON form in the '''ACTIVE_LISTS''' property of the instance.&lt;br /&gt;
&lt;br /&gt;
* Each list is associated with exactly one integer MetaProperty of the instance.&lt;br /&gt;
* An instance can have multiple ActiveLists, one for each integer MetaProperty.&lt;br /&gt;
* ActiveLists can be viewed in UBIK.Studio in the Object Explorer under “ActiveLists” for the instance, but they cannot be edited there.&lt;br /&gt;
&lt;br /&gt;
= Managing {{UBIK}} ActiveLists =&lt;br /&gt;
ActiveLists are managed entirely through server methods. The most relevant methods are:&lt;br /&gt;
&lt;br /&gt;
=== AddOrUpdateActiveList(metaProperty, value, labels, sortOrder) ===&lt;br /&gt;
Adds a new list item or updates the labels of an existing one. Optionally repositions the item according to sortOrder.&lt;br /&gt;
&lt;br /&gt;
=== SortActiveList(metaProperty, orderedValues) ===&lt;br /&gt;
Reorders the items of a list according to the specified sequence. Items not included in '''orderedValues''' are appended in their current order.&lt;br /&gt;
&lt;br /&gt;
=== RemoveActiveListItem(metaProperty, value) ===&lt;br /&gt;
Removes a single list item by its integer value.&lt;br /&gt;
&lt;br /&gt;
=== RemoveActiveList(metaProperty) ===&lt;br /&gt;
Removes the entire list for the given MetaProperty.&lt;br /&gt;
&lt;br /&gt;
=== GetActiveLists() ===&lt;br /&gt;
Returns all ActiveLists defined on the instance as '''UbikActiveList''' objects, each containing the MetaProperty name and its list items.&lt;br /&gt;
&lt;br /&gt;
= Who-Bert Example =&lt;br /&gt;
The following Who-Bert snippet demonstrates how to work with an ActiveList for a MetaProperty named &amp;quot;'''MP_INT_A'''&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csharp&amp;quot;&amp;gt;&lt;br /&gt;
using System;&lt;br /&gt;
using System.Windows.Forms;&lt;br /&gt;
using System.Linq;&lt;br /&gt;
using System.Collections.Generic;&lt;br /&gt;
using UBIK.Kernel;&lt;br /&gt;
using UBIK.Runtime;&lt;br /&gt;
using UBIK.Runtime.Sys;&lt;br /&gt;
using UBIK.Compiler;&lt;br /&gt;
using UBIK.Content;&lt;br /&gt;
&lt;br /&gt;
namespace Studio&lt;br /&gt;
{&lt;br /&gt;
    public class ObjectTest&lt;br /&gt;
    {&lt;br /&gt;
        public void TestObject(params BaseClass[] InVariables)&lt;br /&gt;
        {&lt;br /&gt;
            Debugger.Output(this, &amp;quot;*** Started ActiveList Example&amp;quot;);&lt;br /&gt;
            foreach (BaseClass obj in InVariables)&lt;br /&gt;
            {&lt;br /&gt;
                ContentClass c = obj as ContentClass;&lt;br /&gt;
&lt;br /&gt;
                var labels1 = new Dictionary&amp;lt;string, string&amp;gt; { { &amp;quot;en&amp;quot;, &amp;quot;One&amp;quot; }, { &amp;quot;de&amp;quot;, &amp;quot;Eins&amp;quot; } };&lt;br /&gt;
                var labels2 = new Dictionary&amp;lt;string, string&amp;gt; { { &amp;quot;en&amp;quot;, &amp;quot;Two&amp;quot; }, { &amp;quot;de&amp;quot;, &amp;quot;Zwei&amp;quot; } };&lt;br /&gt;
                var labels3 = new Dictionary&amp;lt;string, string&amp;gt; { { &amp;quot;en&amp;quot;, &amp;quot;Three&amp;quot; }, { &amp;quot;de&amp;quot;, &amp;quot;Drei&amp;quot; } };&lt;br /&gt;
&lt;br /&gt;
                // Add items&lt;br /&gt;
                c.AddOrUpdateActiveList(&amp;quot;MP_INT_A&amp;quot;, 1, labels1);&lt;br /&gt;
                c.AddOrUpdateActiveList(&amp;quot;MP_INT_A&amp;quot;, 2, labels2);&lt;br /&gt;
                c.AddOrUpdateActiveList(&amp;quot;MP_INT_A&amp;quot;, 3, labels3);&lt;br /&gt;
&lt;br /&gt;
                // Update labels and move item 3 to index 0&lt;br /&gt;
                var labels3Updated = new Dictionary&amp;lt;string, string&amp;gt; { { &amp;quot;en&amp;quot;, &amp;quot;Three Updated&amp;quot; }, { &amp;quot;de&amp;quot;, &amp;quot;Drei Aktualisiert&amp;quot; } };&lt;br /&gt;
                c.AddOrUpdateActiveList(&amp;quot;MP_INT_A&amp;quot;, 3, labels3Updated, 0);&lt;br /&gt;
&lt;br /&gt;
                // Sort items: 2, 1, 3&lt;br /&gt;
                c.SortActiveList(&amp;quot;MP_INT_A&amp;quot;, new int[] { 2, 1, 3 });&lt;br /&gt;
&lt;br /&gt;
                // Remove item 1&lt;br /&gt;
                c.RemoveActiveListItem(&amp;quot;MP_INT_A&amp;quot;, 1);&lt;br /&gt;
&lt;br /&gt;
                c.Save();&lt;br /&gt;
            }&lt;br /&gt;
            Debugger.Output(this, &amp;quot;*** Finished ActiveList Example&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
} &amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Further Notes =&lt;br /&gt;
&lt;br /&gt;
* ActiveLists are designed for lightweight, instance-specific value lists that can be updated without ACM rebuilds.&lt;br /&gt;
* They are ideal for use cases where list content varies between instances of the same MetaClass.&lt;br /&gt;
* When both an ActiveList and a SelectiveList are defined for the same MetaProperty, the ActiveList overrides the SelectiveList on the client.&lt;br /&gt;
&lt;br /&gt;
[[Category:Server|UBIK Active Lists]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29724</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29724"/>
				<updated>2026-04-23T13:49:29Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* XAML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
==Introduction {{Version/WinXSince|5.1.0.0}} {{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList.}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. As also mentioned [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]], the following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it should be changed to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI) before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItems}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29723</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29723"/>
				<updated>2026-04-23T13:45:34Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* XAML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
==Introduction {{Version/WinXSince|5.1.0.0}} {{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList.}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. As also mentioned [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]], the following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it is now possible to bind to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI) before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItems}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29722</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29722"/>
				<updated>2026-04-23T13:34:17Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* XAML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
==Introduction {{Version/WinXSince|5.1.0.0}} {{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList.}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. As also mentioned [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]], the following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Optional refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it is now possible to bind to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI) before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItems}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29721</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29721"/>
				<updated>2026-04-23T13:32:01Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* XAML */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
==Introduction {{Version/WinXSince|5.1.0.0}} {{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList.}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically. As also mentioned [[UBIK_WinX_Client_Basics#Selective_List_Properties|here]], the following XAML changes are necessary:&lt;br /&gt;
&lt;br /&gt;
'''Required adaptions of the ''ItemsSource'' binding:'''&lt;br /&gt;
If you have old customizings, the '''ItemsSource''' binding needs to be adapted. Instead of binding to the ''PropertyViewModel'' and using the ''SelectiveListToItemsConverter'', you should now directly bind to ''PropertyViewModel.SelectiveItems'' without the use of a SelectiveListToItemsConverter. In the case of previously binding to ''MetaProperty.SelectiveList.Items'' (or ''MetaProperty.SelectiveList'' plus using the ''SelectiveListToItemsConverter''), the binding should be changed to ''SelectiveItems'' only.&lt;br /&gt;
Depending on whether a SelectiveList or an ActiveList is configured, the proper list will be chosen automatically.&lt;br /&gt;
&lt;br /&gt;
'''Optional refactoring of the ''SelectedItem ConverterParameter'' binding (Mobile only):'''&lt;br /&gt;
Instead of binding to the ContentView x:Name (e.g. ''ConverterParameter={Binding Source={x:Reference YourContentView}}''), it is now possible to bind to the x:Name of the SfListViewExt control and adding the ItemsSource as Path (e.g. ''ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}'').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI) before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Name=&amp;quot;YourContentView&amp;quot; ...&amp;gt;&lt;br /&gt;
   &amp;lt;controls:SfListViewExt&lt;br /&gt;
       x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
       BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
       ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
       ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
       ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
       SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference YourContentView}}}&amp;quot;&lt;br /&gt;
       SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
       SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
       Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
   ...&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP before change&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel, Converter={StaticResource SelectiveListToItemsConverter}}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29719</id>
		<title>UBIK WinX Client Basics</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29719"/>
				<updated>2026-04-23T12:22:17Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Selective List Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UBIK}} Client is the mobile application for viewing and modifying data, showing documents, starting navigation, visualizing POIs and much more.&lt;br /&gt;
&lt;br /&gt;
Client applications are available for Mobile and WinX, however the features available on each of the platform dependent applications might differ. An overview of the available features can be found in the [[Client_Feature_Table|feature comparison table]].&lt;br /&gt;
&lt;br /&gt;
== Languages ==&lt;br /&gt;
The standard {{UBIK}} client supports multiple languages listed below. {{Version/WinXSince|4.3}}&lt;br /&gt;
* Chinese (Simplified)&lt;br /&gt;
* Czech&lt;br /&gt;
* English&lt;br /&gt;
* German&lt;br /&gt;
* Polish&lt;br /&gt;
* Portuguese&lt;br /&gt;
* Spanish&lt;br /&gt;
{{Attention|As we found out, you can only switch to one of the supported languages if it is installed as a system language in the Windows &amp;quot;Preferred languages / Add a language&amp;quot; setting. For example, if you have only English installed when you install {{UBIK}}, you won't be able to switch to any other languages even if you add those later. In that case, you need to make sure your language of choice is installed in Windows first, then update or reinstall {{UBIK}}. This is a Microsoft Store practice and does not apply to clients installed through sideloading, e.g. from our AppCenter.}}&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
Users need to login in order to access confidential data, this can be done in the [[Login View]].&lt;br /&gt;
&lt;br /&gt;
=== Confirm login === &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
Certain pages might require to confirm the login data, even if the user is already logged in. This can be done in the following way: The CheckUserOfflineCommand needs to be called with the username and password as parameter, if the login was valid, the CheckUserOfflineSuccess boolean property is set to true, which causes the text &amp;quot;Login confirmed&amp;quot; to appear in the example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01User&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;User&amp;quot;&lt;br /&gt;
	Text=&amp;quot;{Binding UserName}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;PasswordBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01PW&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;Password&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;Button&lt;br /&gt;
	Command=&amp;quot;{Binding CheckUserOfflineCommand}&amp;quot;&lt;br /&gt;
	Content=&amp;quot;Confirm login&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
		&amp;lt;uc:KeyValueList&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;UserName&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01User, Path=Text}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;Password&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01PW, Path=Password}&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/uc:KeyValueList&amp;gt;&lt;br /&gt;
	&amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;TextBlock Text=&amp;quot;Login confirmed&amp;quot; Visibility=&amp;quot;{Binding AuthenticationViewModel.CheckUserOfflineSuccess, Source={StaticResource Locator}, FallbackValue=false, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Profiles ==&lt;br /&gt;
Profiles are used to store connection information for {{UBIK}} services. It specifies the location where to find the service along with other useful informations. Profiles are stored by UBIK whenever the user created connection information and stored it in the settings. However, profiles can also be created and edited with any text editor. Possible settings to be defined are:&lt;br /&gt;
* InternalConnectionSettings: Connections settings how to connect to the Content and the USAM service that has been set up.&lt;br /&gt;
** Application: the [[APPLICATION]] to use with the service&lt;br /&gt;
** AuthenticationPort: Port Number of the authentication (USAM) service (default: 777)&lt;br /&gt;
** AuthenticationProtocol: Protocol of the authentication service (default: https)&lt;br /&gt;
** AuthenticationServer: the ip address of the authentication server&lt;br /&gt;
** AuthenticationService: the path to the authentication service&lt;br /&gt;
** ContentPort: Port Number of the content service (default: 777)&lt;br /&gt;
** ContentProtocol: Protocol of the content service (default: https)&lt;br /&gt;
** ContentServer: the ip address of the content server&lt;br /&gt;
** ContentService: the path to the content service&lt;br /&gt;
** Context: the [[CONTEXT]] to use with the service&lt;br /&gt;
** SyncMode: the used sync mode (Online [= Auto], Manual, Offline; default:Online)&lt;br /&gt;
* IsDefault: true, if the profile should be the default profile&lt;br /&gt;
* Name: the name of the profile (will also be used to identify the database)&lt;br /&gt;
** If the profile name contains invalid characters like: /, &amp;quot;, &amp;lt;, &amp;gt;, ... they will be replaced with %_&lt;br /&gt;
* Project: the project name. Use this to share a single project name with more than one profile. If the project is defined, all profile with the same project will share one database.&lt;br /&gt;
* Customizing: the XAML subfolder to use for customized UI. This parameter can be used to share one single XAML customizing folder for multiple profiles.&lt;br /&gt;
* ShowHiddenSettings: show hidden settings (feault: false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Profile xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns=&amp;quot;http://schemas.datacontract.org/2004/07/UBIK.WinX.Settings&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Customizing&amp;gt;MYAPPLICATIONUI&amp;lt;/Customizing&amp;gt;&lt;br /&gt;
  &amp;lt;Description i:nil=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;InternalConnectionSettings&amp;gt;&lt;br /&gt;
    &amp;lt;Application&amp;gt;APP_DEMO&amp;lt;/Application&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationPort&amp;gt;777&amp;lt;/AuthenticationPort&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationProtocol&amp;gt;https&amp;lt;/AuthenticationProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationServer&amp;gt;80.243.175.50&amp;lt;/AuthenticationServer&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationService&amp;gt;UBIK/DBG/AUG/DEMO.250/USAM/USAM.svc&amp;lt;/AuthenticationService&amp;gt;&lt;br /&gt;
    &amp;lt;ContentPort&amp;gt;777&amp;lt;/ContentPort&amp;gt;&lt;br /&gt;
    &amp;lt;ContentProtocol&amp;gt;https&amp;lt;/ContentProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;ContentServer&amp;gt;80.243.175.50&amp;lt;/ContentServer&amp;gt;&lt;br /&gt;
    &amp;lt;ContentService&amp;gt;UBIK/DBG/AUG/DEMO.250/CONTENT/UBIKContent.svc&amp;lt;/ContentService&amp;gt;&lt;br /&gt;
    &amp;lt;Context&amp;gt;CXT_DEMO&amp;lt;/Context&amp;gt;&lt;br /&gt;
    &amp;lt;SyncMode&amp;gt;Online&amp;lt;/SyncMode&amp;gt;&lt;br /&gt;
  &amp;lt;/InternalConnectionSettings&amp;gt;&lt;br /&gt;
  &amp;lt;IsDefault&amp;gt;true&amp;lt;/IsDefault&amp;gt;&lt;br /&gt;
  &amp;lt;Name&amp;gt;DEMO.250.AT&amp;lt;/Name&amp;gt;&lt;br /&gt;
  &amp;lt;Project&amp;gt;DEMO.250&amp;lt;/Project&amp;gt;&lt;br /&gt;
  &amp;lt;ShowHiddenSettings&amp;gt;false&amp;lt;/ShowHiddenSettings&amp;gt;&lt;br /&gt;
&amp;lt;/Profile&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Content Browser ==&lt;br /&gt;
Allows to navigate through the entire data model in a hierarchical manner, as it is published by the server.&lt;br /&gt;
&lt;br /&gt;
Initially, a list of objects (&amp;quot;root objects&amp;quot;) is shown. Upon selecting an object, a new browser is opened for that object, showing details about it. When an object is selected in the content browser, it is called the browser's context. For such a contextual object, child objects and selected properties are shown. Also, there is a context menu providing actions related to the currently selected object. &lt;br /&gt;
&lt;br /&gt;
=== Status Bar ===&lt;br /&gt;
==== Saving Indicator ====&lt;br /&gt;
[[File:UI_WinX_DbSavingIndicator.PNG|300 px|thumb|border|alt=Saving Symbol|Saving Symbol]]&lt;br /&gt;
{{Version/WinXSince|2.5.4}}Whenever content is being saved into the local database (for example, after a branch is downloaded from the server), there will be a blinking symbol indicating the saving activity is happening in the background.&lt;br /&gt;
During that time, the user is advised to not logout or close the app because the content might be lost otherwise. However, it is okay to undertake other tasks such as browsing, editing or downloading branches.&lt;br /&gt;
&lt;br /&gt;
==== Uncommitted Changes Indicator ====&lt;br /&gt;
{{Version/WinXSince|4.6.0}} When there are uncommitted changes it is indicated by a button in the Status Bar displaying an icon and the number of uncommitted changes. Pressing this button opens a fly out list with all of the objects that have uncommitted changes to them. Pressing one of those list objects navigates directly to the corresponding object. The Uncommitted Changes Indicator button is only shown when there are uncommitted changes otherwise it is not visible. When in online mode all changes should be committed automatically so the Indicator is mainly useful in Manual or Offline Sync Mode.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Version/WinXSince|4.7.0}} Queries are now excluded from uncommitted changes.&lt;br /&gt;
&lt;br /&gt;
=== Child Page ===&lt;br /&gt;
&lt;br /&gt;
[[File:ChildPage.PNG|400 px|thumb|border|alt=Child Page|Child Page]]&lt;br /&gt;
&lt;br /&gt;
The child page shows the context of a selected object. &lt;br /&gt;
&lt;br /&gt;
The global status bar shows the icon, the name and the description of the selected object. An arrow on the left side allows the user to navigate back to the parent object. On the right side the currently logged-in user is indicated. By clicking on the username one is able to navigate back to the home screen or log off.&lt;br /&gt;
&lt;br /&gt;
The right side of the child page shows child objects of the current object. Each child object is represented by an icon, a name and a description. With the [[SYSCLS_CHILDINFOOWNER|child info owner classification]], one can additionally show the number of documents and regular grandchildren to be expected for a child object.&lt;br /&gt;
&lt;br /&gt;
On the left side of the child page the current object´s high priority properties are shown. By clicking on a live value property, the live value details dialog opens. By clicking on an editable [[UBIK_WinX_Client_Basics#High_priority_properties| high priority property]], an editor opens {{Version/WinXSince|2.5.4}}. If a property was edited a save button is shown in the lower left corner, allowing the user to commit the changes. If a property of a query object was edited an evaluate button is shown in the lower left corner, allowing the user to run the query with the changed propery.&lt;br /&gt;
&lt;br /&gt;
=== Properties Page ===&lt;br /&gt;
&lt;br /&gt;
On the properties page, one can see a list of all the current object's visible properties, and, given the respective rights, a possibility to edit them.&lt;br /&gt;
&lt;br /&gt;
=== Context Menu ===&lt;br /&gt;
&lt;br /&gt;
For any current object, there is a set of potential context-sensitive actions. These are displayed as buttons in the title bar, with a three-dot overflow menu button aggregating all the actions that wouldn't fit there anymore. There are many potential actions; some of them are only enabled for specifically classified objects, like objects with a geo location. Default actions are refresh, various download options, child object creation, copy/paste, commit/revert changes, geo-related actions, etc.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
==== Root objects vs child objects ====&lt;br /&gt;
&lt;br /&gt;
The first entry point in the ''Content Browser'' is the list of root objects.&lt;br /&gt;
&lt;br /&gt;
==== Task objects ====&lt;br /&gt;
&lt;br /&gt;
[[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Task|Tasks]] and [[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Work_Package|work packages]] are special types of {{UBIK}} objects used for maintenance, repair and overhaul (MRO) use-cases.&lt;br /&gt;
&lt;br /&gt;
==== Query objects ====&lt;br /&gt;
&lt;br /&gt;
Queries are special types of {{UBIK}} objects with dynamic children. The child objects are looked up depending on the query object's criteria, which can be specified the same as property values for regular objects. There are [[QUERY|online queries]] evaluated by the server, and [[https://wiki.augmensys.com/index.php?title=Offline_Query_(UBIK_WinX)|offline queries]] evaluated on the client, thus requiring no internet connection.&lt;br /&gt;
&lt;br /&gt;
==== Safety relevant objects ====&lt;br /&gt;
&lt;br /&gt;
Object classified as [[SYSCLS_SAFETY_RELEVANT_OBJECT|safety relevant]] require the user to accept safety instructions to access the object, which can be required for hazardous MRO tasks, for example.&lt;br /&gt;
&lt;br /&gt;
==== Commissioning objects ====&lt;br /&gt;
&lt;br /&gt;
Similar to and based on MRO objects, commissioning objects are tasks and work packages for the commissioning use-case, e.g., [[SYSCLS_COMMISSIONINGCHECK|commissioning check tasks]].&lt;br /&gt;
&lt;br /&gt;
==== Locked objects  ====&lt;br /&gt;
In several use-cases, objects can be [[Locked_Objects|locked]] for editing.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Authentication Properties ====&lt;br /&gt;
[[SYSCLS_REQUIRE_AUTHENTICATION|Authentication Properties]] are properties which need a user authentication (through a password field) to be edited.&lt;br /&gt;
&lt;br /&gt;
==== Min max properties ====&lt;br /&gt;
See [[Min_Max_Properties]].&lt;br /&gt;
&lt;br /&gt;
==== Live value properties ====&lt;br /&gt;
[[Live_Values]] are specific property values extracted from a process control system like OPC-UA or OSIPI. &lt;br /&gt;
&lt;br /&gt;
==== High priority properties ====&lt;br /&gt;
High priority properties are properties having a priority higher than the [[Settings#Content |priority threshold]].&lt;br /&gt;
&lt;br /&gt;
==== Selective List Properties ====&lt;br /&gt;
For some properties, the user should be able to select from a predefined set of values. Such a predefined set is called a &amp;quot;selective list&amp;quot; in {{UBIK}}.&lt;br /&gt;
Furthermore, there are [[Dynamic_Selective_List_(Client)|dynamic selective lists]] that can be filtered or assembled based on dependency property values.&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
{{Hint|{{Version/WinXSince|5.1.0.0}}{{Version/MobileSince|5.1.0.0}} The ItemsSource binding of related WinX/Mobile controls in Xaml now requires only '''PropertyViewModel.SelectiveItems''', which will return the items of an [[Active_List_Client|ActiveList]], or the items of a MetaProperty.SelectiveList, depending on the server-side configuration. In this case, the [[Converters_In_Mobile#List_of_Available_Converters|SelectiveListToItemsConverter]] is outdated and should not be used anymore.}}&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
==== Properties with value records {{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
[[File:UI_WinX_PropertyWithValueRecords.png|thumb|A property with value records]]&lt;br /&gt;
[[File:UI_WinX_PropertyValueRecords.png|thumb|Property value records dialog]]&lt;br /&gt;
In addition to its value, a property might also bring along a series of value records showing &amp;quot;who changed the value at what time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When such records exist, the property row shows a special symbol on the right side. After a right click (with mouse) or a long tap (with touch) on the property row, a dialog will be shown to present these records (sorted by their time, recent ones on top).&lt;br /&gt;
&lt;br /&gt;
==== String properties with length restrictions ====&lt;br /&gt;
A string property can be configured with a [[MetaProperty#Text_2|length restriction]]. The client property editing UI doesn't allow users to confirm values exceeding the limit.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
==== [[Editors]] ====&lt;br /&gt;
&lt;br /&gt;
See [[Editors]]&lt;br /&gt;
&lt;br /&gt;
=== Documents ===&lt;br /&gt;
UBIK supports and displays document objects and a bunch of actions related to them (editing, redlining, creation, thumbnails, ...).&lt;br /&gt;
See [[Documents_(Client)|Documents (Client)]]&lt;br /&gt;
&lt;br /&gt;
==== Fit Mode{{Version/WinXSince|3.5}} ====&lt;br /&gt;
See [[Documents_(Client)#Fit_Mode|Fit Mode]]&lt;br /&gt;
&lt;br /&gt;
==== Auto zoom {{Version/WinXSince|4.6}}{{Version/XamarinSince|4.6}} ====&lt;br /&gt;
See [[Documents_(Client)#Auto_zoom|Auto zoom]]&lt;br /&gt;
&lt;br /&gt;
==== Editing{{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
See [[Documents_(Client)#Editing|Editing]]&lt;br /&gt;
&lt;br /&gt;
==== Offline availability ====&lt;br /&gt;
See [[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
==== Clear Online Documents ====&lt;br /&gt;
[[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
== AR Features ==&lt;br /&gt;
&lt;br /&gt;
=== POI View ===&lt;br /&gt;
Brings up the POI View|Augmented Reality view and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Markerless ===&lt;br /&gt;
&lt;br /&gt;
=== Map View ===&lt;br /&gt;
Opens the Map View and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
== Positioning ==&lt;br /&gt;
{{UBIK}} clients use a [[Location_Manager|Location Manager]] in order to gain knowledge about their position, so it can help the user navigate to his/her target.&lt;br /&gt;
&lt;br /&gt;
The user can choose one of different positioning modes optimized for different environments.&lt;br /&gt;
Most of them incorporate multiple technologies for calculating positions or checking their reliability.&lt;br /&gt;
&lt;br /&gt;
=== Positioning modes ===&lt;br /&gt;
&lt;br /&gt;
* ''Use all'' - uses all available position sources&lt;br /&gt;
* ''LLA only mode'' - used for positioning using markers only&lt;br /&gt;
* ''Beacon Proximity mode'' - uses iBeacon proximity and LLA only&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
&lt;br /&gt;
==== GPS ==== &lt;br /&gt;
GPS is used as a primary positioning input source for outdoor areas. Its precision depends on the environment and satellite availability. With good circumstances, the accuracy varies between 1 and 10 meters.&lt;br /&gt;
&lt;br /&gt;
==== LLA markers ==== &lt;br /&gt;
LLA markers basically are QR codes with location data encoded into them - which can be used for positioning when they are scanned.&lt;br /&gt;
&lt;br /&gt;
==== Object Proximity Positioning ====&lt;br /&gt;
The location of nearby Geo-Objects can be used for positioning.&lt;br /&gt;
&lt;br /&gt;
The position of a Geo-Object can be used manually by pushing the button {{key press|Use Location}} in the [[UBIK_WinX_Client_Basics#Context_Menu|Context Menu]]. &lt;br /&gt;
&lt;br /&gt;
The geo information of an object gets used automatically if exactly one single object is found through scanning. If more objects are found, their geo information doesn´t get used. Scanning includes  [[UBIK Client Basics#Bar Code|Bar Code]], [[UBIK Client Basics#QR Code|QR Code]], [[UBIK Client Basics#OCR|OCR]] and [[UBIK Client Basics#RFID|RFID]]. The automatic use of Geo-Object´s location can be turned off by disabling the &amp;quot;EnableObjectProximityPositioning&amp;quot; setting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beacon-Proximity Positioning ====&lt;br /&gt;
The Beacon Proximity Mode detects if the user is in the proximity of a beacon. The proximity region is defined by a proximity distance which creates a sphere around the beacon. Whenever the calculated distance to a beacon is smaller than the proximity distance, the user is supposed to be at the position of the beacon. If multiple regions intersect the user is supposed to be at the position of the nearest beacon. &lt;br /&gt;
In order to use Beacon Proximity as a Positioning System, Bluetooth Low Energy has to be available and enabled on the mobile device. If a new environment should be equipped with iBeacon-Positioning, an expert has to mount iBeacons on known positions and calibrate the propagation factor of these beacons. Proximity beacons can be configured using [[SYSCLS_PROXIMITY_BEACON]]. {{Version/WinXSince|UWP}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Finding Objects ==&lt;br /&gt;
=== Free Text Search ===&lt;br /&gt;
&lt;br /&gt;
=== ID Marker ===&lt;br /&gt;
&lt;br /&gt;
=== QR Code ===&lt;br /&gt;
&lt;br /&gt;
=== Bar Code ===&lt;br /&gt;
&lt;br /&gt;
=== RFID Code ===&lt;br /&gt;
Provides a fast and convenient way for users to find objects that are identifiable through [[RFID tags|RFID tags]].&lt;br /&gt;
&lt;br /&gt;
=== OCR ===&lt;br /&gt;
&lt;br /&gt;
== Linked objects == &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
It is possible to display values of linked objects by using the &amp;quot;LinkedLevel&amp;quot; property. An example can be seen here, where Items[0] is a Guid property linking to another object. The ItemsControl then binds to the Properties of the linked object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid DataContext=&amp;quot;{Binding Properties.Items[0].LinkedLevel}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ItemsControl ItemsSource=&amp;quot;{Binding Properties.AllItems}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Client_Feature_Table]]&lt;br /&gt;
* [[SYSCLS_DOCUMENT_FITMODE]]&lt;br /&gt;
* [[SYSCLS_SHOWDOCUMENTS]]&lt;br /&gt;
* [[SYSCLS_SHOWPROPERTIES]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29716</id>
		<title>Active List Client</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Active_List_Client&amp;diff=29716"/>
				<updated>2026-04-21T08:38:19Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Introduction {{Version/WinXSince|5.1.0.0}} {{Version/MobileSince|5.1.0.0}} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
==Introduction {{Version/WinXSince|5.1.0.0}} {{Version/MobileSince|5.1.0.0}}==&lt;br /&gt;
If an Active List is defined on a [[Instance|Content Object]] that is associated with an [[MetaProperty#Integer|integer]] [[MetaProperty]], the property is displayed like a usual [[UBIK WinX Client Basics#Selective List Properties|SelectiveList]] which is based on a [[MetaProperty]]. An ActiveList (i.e., if it has been configured on the server for a content object) always takes precedence over a MetaProperty SelectiveList. For editing, it behaves exactly the same as with a standard [[SELECTIVELIST|SelectiveList]].&lt;br /&gt;
&lt;br /&gt;
{{Hint|There are no visible differences in the UI between an ActiveList and a MetaProperty SelectiveList.}}&lt;br /&gt;
&lt;br /&gt;
'''Limitations'''&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Multi_Select_%28UBIK_Client%29#Editing_common_properties_of_selected_items_.28UWP_only.29|Mass editing]] is currently not supported for Properties containing Active Lists.&lt;br /&gt;
* Copy and Paste for Active Lists is not supported. When copying an object containing Active Lists, the copy of the object will not contain these Active Lists. In this case, the editing UI of the pasted object will appear like that of a standard Integer Property. If a value has already been selected, this value will be copied, though.&lt;br /&gt;
&lt;br /&gt;
=== XAML ===&lt;br /&gt;
A new SelectiveItems property was added to the PropertyViewModel to enable access to an ActiveList via XAML. No DataTriggers or additional checks are required, as the correct list selection is handled automatically.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tabs&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;Mobile (MAUI)&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;clr-namespace:UBIK.MAUI.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:SfListViewExt&lt;br /&gt;
    x:Name=&amp;quot;SelectiveList&amp;quot;&lt;br /&gt;
    BindingContext=&amp;quot;{TemplateBinding BindingContext}&amp;quot;&lt;br /&gt;
    ItemSize=&amp;quot;40&amp;quot;&lt;br /&gt;
    ItemTemplate=&amp;quot;{StaticResource PopupSelectiveListItemTemplate}&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding SelectiveItems}&amp;quot;&lt;br /&gt;
    SelectedItem=&amp;quot;{Binding ValueItem.PropertyValue, Mode=OneWay, Converter={StaticResource PropertyValueToSelectiveItem}, ConverterParameter={Binding Source={x:Reference SelectiveList}, Path=ItemsSource}}&amp;quot;&lt;br /&gt;
    SelectionBackground=&amp;quot;{DynamicResource UBIKAccentColor}&amp;quot;&lt;br /&gt;
    SelectionMode=&amp;quot;Single&amp;quot;&lt;br /&gt;
    Style=&amp;quot;{DynamicResource UBIKListView}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;tab name=&amp;quot;UWP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
xmlns:controls=&amp;quot;using:UBIK.WinX.Controls&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;controls:ComboBoxExt&lt;br /&gt;
    x:Name=&amp;quot;ComboBox&amp;quot;&lt;br /&gt;
    Grid.ColumnSpan=&amp;quot;2&amp;quot;&lt;br /&gt;
    HorizontalAlignment=&amp;quot;Stretch&amp;quot;&lt;br /&gt;
    DisplayMemberPath=&amp;quot;DisplayText&amp;quot;&lt;br /&gt;
    ItemsSource=&amp;quot;{Binding PropertyViewModel.SelectiveItems}&amp;quot;&lt;br /&gt;
    PlaceholderText=&amp;quot;{Binding PropertyEdit_PickerPlaceholder, Source={StaticResource AppResources}}&amp;quot;&lt;br /&gt;
    SelectedValue=&amp;quot;{Binding PropertyValue, Mode=TwoWay}&amp;quot;&lt;br /&gt;
    SelectedValuePath=&amp;quot;Value&amp;quot;&lt;br /&gt;
    Visibility=&amp;quot;{Binding PropertyViewModel.ShowComboBox, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;/tab&amp;gt;&lt;br /&gt;
&amp;lt;/tabs&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[UBIK Active Lists|Active Lists Server]]&lt;br /&gt;
* [[MROCLS PICK LIST TASK|Pick List Task]]&lt;br /&gt;
* [[MRO_Objects_(Client)#Pick_List_Task|MRO Objects (Client) Pick List Task]]&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Active List Client]]&lt;br /&gt;
[[Category:Mobile|Active List Client]]&lt;br /&gt;
[[Category:Version 5.1|Active List Client]]&lt;br /&gt;
[[Category:WinX|Active List Client]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29715</id>
		<title>UBIK WinX Client Basics</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29715"/>
				<updated>2026-04-20T13:21:21Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Selective List Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UBIK}} Client is the mobile application for viewing and modifying data, showing documents, starting navigation, visualizing POIs and much more.&lt;br /&gt;
&lt;br /&gt;
Client applications are available for Mobile and WinX, however the features available on each of the platform dependent applications might differ. An overview of the available features can be found in the [[Client_Feature_Table|feature comparison table]].&lt;br /&gt;
&lt;br /&gt;
== Languages ==&lt;br /&gt;
The standard {{UBIK}} client supports multiple languages listed below. {{Version/WinXSince|4.3}}&lt;br /&gt;
* Chinese (Simplified)&lt;br /&gt;
* Czech&lt;br /&gt;
* English&lt;br /&gt;
* German&lt;br /&gt;
* Polish&lt;br /&gt;
* Portuguese&lt;br /&gt;
* Spanish&lt;br /&gt;
{{Attention|As we found out, you can only switch to one of the supported languages if it is installed as a system language in the Windows &amp;quot;Preferred languages / Add a language&amp;quot; setting. For example, if you have only English installed when you install {{UBIK}}, you won't be able to switch to any other languages even if you add those later. In that case, you need to make sure your language of choice is installed in Windows first, then update or reinstall {{UBIK}}. This is a Microsoft Store practice and does not apply to clients installed through sideloading, e.g. from our AppCenter.}}&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
Users need to login in order to access confidential data, this can be done in the [[Login View]].&lt;br /&gt;
&lt;br /&gt;
=== Confirm login === &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
Certain pages might require to confirm the login data, even if the user is already logged in. This can be done in the following way: The CheckUserOfflineCommand needs to be called with the username and password as parameter, if the login was valid, the CheckUserOfflineSuccess boolean property is set to true, which causes the text &amp;quot;Login confirmed&amp;quot; to appear in the example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01User&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;User&amp;quot;&lt;br /&gt;
	Text=&amp;quot;{Binding UserName}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;PasswordBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01PW&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;Password&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;Button&lt;br /&gt;
	Command=&amp;quot;{Binding CheckUserOfflineCommand}&amp;quot;&lt;br /&gt;
	Content=&amp;quot;Confirm login&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
		&amp;lt;uc:KeyValueList&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;UserName&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01User, Path=Text}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;Password&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01PW, Path=Password}&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/uc:KeyValueList&amp;gt;&lt;br /&gt;
	&amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;TextBlock Text=&amp;quot;Login confirmed&amp;quot; Visibility=&amp;quot;{Binding AuthenticationViewModel.CheckUserOfflineSuccess, Source={StaticResource Locator}, FallbackValue=false, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Profiles ==&lt;br /&gt;
Profiles are used to store connection information for {{UBIK}} services. It specifies the location where to find the service along with other useful informations. Profiles are stored by UBIK whenever the user created connection information and stored it in the settings. However, profiles can also be created and edited with any text editor. Possible settings to be defined are:&lt;br /&gt;
* InternalConnectionSettings: Connections settings how to connect to the Content and the USAM service that has been set up.&lt;br /&gt;
** Application: the [[APPLICATION]] to use with the service&lt;br /&gt;
** AuthenticationPort: Port Number of the authentication (USAM) service (default: 777)&lt;br /&gt;
** AuthenticationProtocol: Protocol of the authentication service (default: https)&lt;br /&gt;
** AuthenticationServer: the ip address of the authentication server&lt;br /&gt;
** AuthenticationService: the path to the authentication service&lt;br /&gt;
** ContentPort: Port Number of the content service (default: 777)&lt;br /&gt;
** ContentProtocol: Protocol of the content service (default: https)&lt;br /&gt;
** ContentServer: the ip address of the content server&lt;br /&gt;
** ContentService: the path to the content service&lt;br /&gt;
** Context: the [[CONTEXT]] to use with the service&lt;br /&gt;
** SyncMode: the used sync mode (Online [= Auto], Manual, Offline; default:Online)&lt;br /&gt;
* IsDefault: true, if the profile should be the default profile&lt;br /&gt;
* Name: the name of the profile (will also be used to identify the database)&lt;br /&gt;
** If the profile name contains invalid characters like: /, &amp;quot;, &amp;lt;, &amp;gt;, ... they will be replaced with %_&lt;br /&gt;
* Project: the project name. Use this to share a single project name with more than one profile. If the project is defined, all profile with the same project will share one database.&lt;br /&gt;
* Customizing: the XAML subfolder to use for customized UI. This parameter can be used to share one single XAML customizing folder for multiple profiles.&lt;br /&gt;
* ShowHiddenSettings: show hidden settings (feault: false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Profile xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns=&amp;quot;http://schemas.datacontract.org/2004/07/UBIK.WinX.Settings&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Customizing&amp;gt;MYAPPLICATIONUI&amp;lt;/Customizing&amp;gt;&lt;br /&gt;
  &amp;lt;Description i:nil=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;InternalConnectionSettings&amp;gt;&lt;br /&gt;
    &amp;lt;Application&amp;gt;APP_DEMO&amp;lt;/Application&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationPort&amp;gt;777&amp;lt;/AuthenticationPort&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationProtocol&amp;gt;https&amp;lt;/AuthenticationProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationServer&amp;gt;80.243.175.50&amp;lt;/AuthenticationServer&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationService&amp;gt;UBIK/DBG/AUG/DEMO.250/USAM/USAM.svc&amp;lt;/AuthenticationService&amp;gt;&lt;br /&gt;
    &amp;lt;ContentPort&amp;gt;777&amp;lt;/ContentPort&amp;gt;&lt;br /&gt;
    &amp;lt;ContentProtocol&amp;gt;https&amp;lt;/ContentProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;ContentServer&amp;gt;80.243.175.50&amp;lt;/ContentServer&amp;gt;&lt;br /&gt;
    &amp;lt;ContentService&amp;gt;UBIK/DBG/AUG/DEMO.250/CONTENT/UBIKContent.svc&amp;lt;/ContentService&amp;gt;&lt;br /&gt;
    &amp;lt;Context&amp;gt;CXT_DEMO&amp;lt;/Context&amp;gt;&lt;br /&gt;
    &amp;lt;SyncMode&amp;gt;Online&amp;lt;/SyncMode&amp;gt;&lt;br /&gt;
  &amp;lt;/InternalConnectionSettings&amp;gt;&lt;br /&gt;
  &amp;lt;IsDefault&amp;gt;true&amp;lt;/IsDefault&amp;gt;&lt;br /&gt;
  &amp;lt;Name&amp;gt;DEMO.250.AT&amp;lt;/Name&amp;gt;&lt;br /&gt;
  &amp;lt;Project&amp;gt;DEMO.250&amp;lt;/Project&amp;gt;&lt;br /&gt;
  &amp;lt;ShowHiddenSettings&amp;gt;false&amp;lt;/ShowHiddenSettings&amp;gt;&lt;br /&gt;
&amp;lt;/Profile&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Content Browser ==&lt;br /&gt;
Allows to navigate through the entire data model in a hierarchical manner, as it is published by the server.&lt;br /&gt;
&lt;br /&gt;
Initially, a list of objects (&amp;quot;root objects&amp;quot;) is shown. Upon selecting an object, a new browser is opened for that object, showing details about it. When an object is selected in the content browser, it is called the browser's context. For such a contextual object, child objects and selected properties are shown. Also, there is a context menu providing actions related to the currently selected object. &lt;br /&gt;
&lt;br /&gt;
=== Status Bar ===&lt;br /&gt;
==== Saving Indicator ====&lt;br /&gt;
[[File:UI_WinX_DbSavingIndicator.PNG|300 px|thumb|border|alt=Saving Symbol|Saving Symbol]]&lt;br /&gt;
{{Version/WinXSince|2.5.4}}Whenever content is being saved into the local database (for example, after a branch is downloaded from the server), there will be a blinking symbol indicating the saving activity is happening in the background.&lt;br /&gt;
During that time, the user is advised to not logout or close the app because the content might be lost otherwise. However, it is okay to undertake other tasks such as browsing, editing or downloading branches.&lt;br /&gt;
&lt;br /&gt;
==== Uncommitted Changes Indicator ====&lt;br /&gt;
{{Version/WinXSince|4.6.0}} When there are uncommitted changes it is indicated by a button in the Status Bar displaying an icon and the number of uncommitted changes. Pressing this button opens a fly out list with all of the objects that have uncommitted changes to them. Pressing one of those list objects navigates directly to the corresponding object. The Uncommitted Changes Indicator button is only shown when there are uncommitted changes otherwise it is not visible. When in online mode all changes should be committed automatically so the Indicator is mainly useful in Manual or Offline Sync Mode.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Version/WinXSince|4.7.0}} Queries are now excluded from uncommitted changes.&lt;br /&gt;
&lt;br /&gt;
=== Child Page ===&lt;br /&gt;
&lt;br /&gt;
[[File:ChildPage.PNG|400 px|thumb|border|alt=Child Page|Child Page]]&lt;br /&gt;
&lt;br /&gt;
The child page shows the context of a selected object. &lt;br /&gt;
&lt;br /&gt;
The global status bar shows the icon, the name and the description of the selected object. An arrow on the left side allows the user to navigate back to the parent object. On the right side the currently logged-in user is indicated. By clicking on the username one is able to navigate back to the home screen or log off.&lt;br /&gt;
&lt;br /&gt;
The right side of the child page shows child objects of the current object. Each child object is represented by an icon, a name and a description. With the [[SYSCLS_CHILDINFOOWNER|child info owner classification]], one can additionally show the number of documents and regular grandchildren to be expected for a child object.&lt;br /&gt;
&lt;br /&gt;
On the left side of the child page the current object´s high priority properties are shown. By clicking on a live value property, the live value details dialog opens. By clicking on an editable [[UBIK_WinX_Client_Basics#High_priority_properties| high priority property]], an editor opens {{Version/WinXSince|2.5.4}}. If a property was edited a save button is shown in the lower left corner, allowing the user to commit the changes. If a property of a query object was edited an evaluate button is shown in the lower left corner, allowing the user to run the query with the changed propery.&lt;br /&gt;
&lt;br /&gt;
=== Properties Page ===&lt;br /&gt;
&lt;br /&gt;
On the properties page, one can see a list of all the current object's visible properties, and, given the respective rights, a possibility to edit them.&lt;br /&gt;
&lt;br /&gt;
=== Context Menu ===&lt;br /&gt;
&lt;br /&gt;
For any current object, there is a set of potential context-sensitive actions. These are displayed as buttons in the title bar, with a three-dot overflow menu button aggregating all the actions that wouldn't fit there anymore. There are many potential actions; some of them are only enabled for specifically classified objects, like objects with a geo location. Default actions are refresh, various download options, child object creation, copy/paste, commit/revert changes, geo-related actions, etc.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
==== Root objects vs child objects ====&lt;br /&gt;
&lt;br /&gt;
The first entry point in the ''Content Browser'' is the list of root objects.&lt;br /&gt;
&lt;br /&gt;
==== Task objects ====&lt;br /&gt;
&lt;br /&gt;
[[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Task|Tasks]] and [[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Work_Package|work packages]] are special types of {{UBIK}} objects used for maintenance, repair and overhaul (MRO) use-cases.&lt;br /&gt;
&lt;br /&gt;
==== Query objects ====&lt;br /&gt;
&lt;br /&gt;
Queries are special types of {{UBIK}} objects with dynamic children. The child objects are looked up depending on the query object's criteria, which can be specified the same as property values for regular objects. There are [[QUERY|online queries]] evaluated by the server, and [[https://wiki.augmensys.com/index.php?title=Offline_Query_(UBIK_WinX)|offline queries]] evaluated on the client, thus requiring no internet connection.&lt;br /&gt;
&lt;br /&gt;
==== Safety relevant objects ====&lt;br /&gt;
&lt;br /&gt;
Object classified as [[SYSCLS_SAFETY_RELEVANT_OBJECT|safety relevant]] require the user to accept safety instructions to access the object, which can be required for hazardous MRO tasks, for example.&lt;br /&gt;
&lt;br /&gt;
==== Commissioning objects ====&lt;br /&gt;
&lt;br /&gt;
Similar to and based on MRO objects, commissioning objects are tasks and work packages for the commissioning use-case, e.g., [[SYSCLS_COMMISSIONINGCHECK|commissioning check tasks]].&lt;br /&gt;
&lt;br /&gt;
==== Locked objects  ====&lt;br /&gt;
In several use-cases, objects can be [[Locked_Objects|locked]] for editing.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Authentication Properties ====&lt;br /&gt;
[[SYSCLS_REQUIRE_AUTHENTICATION|Authentication Properties]] are properties which need a user authentication (through a password field) to be edited.&lt;br /&gt;
&lt;br /&gt;
==== Min max properties ====&lt;br /&gt;
See [[Min_Max_Properties]].&lt;br /&gt;
&lt;br /&gt;
==== Live value properties ====&lt;br /&gt;
[[Live_Values]] are specific property values extracted from a process control system like OPC-UA or OSIPI. &lt;br /&gt;
&lt;br /&gt;
==== High priority properties ====&lt;br /&gt;
High priority properties are properties having a priority higher than the [[Settings#Content |priority threshold]].&lt;br /&gt;
&lt;br /&gt;
==== Selective List Properties ====&lt;br /&gt;
For some properties, the user should be able to select from a predefined set of values. Such a predefined set is called a &amp;quot;selective list&amp;quot; in {{UBIK}}.&lt;br /&gt;
Furthermore, there are [[Dynamic_Selective_List_(Client)|dynamic selective lists]] that can be filtered or assembled based on dependency property values.&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
{{Hint|{{Version/WinXSince|5.1.0.0}}{{Version/MobileSince|5.1.0.0}} The ItemsSource binding of related WinX/Mobile controls in Xaml now requires only '''PropertyViewModel.SelectiveItems''', which will return the items of an [[Active_List_Client|ActiveList]], or the items of a MetaProperty.SelectiveList, depending on the server-side configuration. Mobile only: In this case, the [[Converters_In_Mobile#List_of_Available_Converters|SelectiveListToItemsConverter]] is outdated and should not be used anymore.}}&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
==== Properties with value records {{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
[[File:UI_WinX_PropertyWithValueRecords.png|thumb|A property with value records]]&lt;br /&gt;
[[File:UI_WinX_PropertyValueRecords.png|thumb|Property value records dialog]]&lt;br /&gt;
In addition to its value, a property might also bring along a series of value records showing &amp;quot;who changed the value at what time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When such records exist, the property row shows a special symbol on the right side. After a right click (with mouse) or a long tap (with touch) on the property row, a dialog will be shown to present these records (sorted by their time, recent ones on top).&lt;br /&gt;
&lt;br /&gt;
==== String properties with length restrictions ====&lt;br /&gt;
A string property can be configured with a [[MetaProperty#Text_2|length restriction]]. The client property editing UI doesn't allow users to confirm values exceeding the limit.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
==== [[Editors]] ====&lt;br /&gt;
&lt;br /&gt;
See [[Editors]]&lt;br /&gt;
&lt;br /&gt;
=== Documents ===&lt;br /&gt;
UBIK supports and displays document objects and a bunch of actions related to them (editing, redlining, creation, thumbnails, ...).&lt;br /&gt;
See [[Documents_(Client)|Documents (Client)]]&lt;br /&gt;
&lt;br /&gt;
==== Fit Mode{{Version/WinXSince|3.5}} ====&lt;br /&gt;
See [[Documents_(Client)#Fit_Mode|Fit Mode]]&lt;br /&gt;
&lt;br /&gt;
==== Auto zoom {{Version/WinXSince|4.6}}{{Version/XamarinSince|4.6}} ====&lt;br /&gt;
See [[Documents_(Client)#Auto_zoom|Auto zoom]]&lt;br /&gt;
&lt;br /&gt;
==== Editing{{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
See [[Documents_(Client)#Editing|Editing]]&lt;br /&gt;
&lt;br /&gt;
==== Offline availability ====&lt;br /&gt;
See [[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
==== Clear Online Documents ====&lt;br /&gt;
[[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
== AR Features ==&lt;br /&gt;
&lt;br /&gt;
=== POI View ===&lt;br /&gt;
Brings up the POI View|Augmented Reality view and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Markerless ===&lt;br /&gt;
&lt;br /&gt;
=== Map View ===&lt;br /&gt;
Opens the Map View and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
== Positioning ==&lt;br /&gt;
{{UBIK}} clients use a [[Location_Manager|Location Manager]] in order to gain knowledge about their position, so it can help the user navigate to his/her target.&lt;br /&gt;
&lt;br /&gt;
The user can choose one of different positioning modes optimized for different environments.&lt;br /&gt;
Most of them incorporate multiple technologies for calculating positions or checking their reliability.&lt;br /&gt;
&lt;br /&gt;
=== Positioning modes ===&lt;br /&gt;
&lt;br /&gt;
* ''Use all'' - uses all available position sources&lt;br /&gt;
* ''LLA only mode'' - used for positioning using markers only&lt;br /&gt;
* ''Beacon Proximity mode'' - uses iBeacon proximity and LLA only&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
&lt;br /&gt;
==== GPS ==== &lt;br /&gt;
GPS is used as a primary positioning input source for outdoor areas. Its precision depends on the environment and satellite availability. With good circumstances, the accuracy varies between 1 and 10 meters.&lt;br /&gt;
&lt;br /&gt;
==== LLA markers ==== &lt;br /&gt;
LLA markers basically are QR codes with location data encoded into them - which can be used for positioning when they are scanned.&lt;br /&gt;
&lt;br /&gt;
==== Object Proximity Positioning ====&lt;br /&gt;
The location of nearby Geo-Objects can be used for positioning.&lt;br /&gt;
&lt;br /&gt;
The position of a Geo-Object can be used manually by pushing the button {{key press|Use Location}} in the [[UBIK_WinX_Client_Basics#Context_Menu|Context Menu]]. &lt;br /&gt;
&lt;br /&gt;
The geo information of an object gets used automatically if exactly one single object is found through scanning. If more objects are found, their geo information doesn´t get used. Scanning includes  [[UBIK Client Basics#Bar Code|Bar Code]], [[UBIK Client Basics#QR Code|QR Code]], [[UBIK Client Basics#OCR|OCR]] and [[UBIK Client Basics#RFID|RFID]]. The automatic use of Geo-Object´s location can be turned off by disabling the &amp;quot;EnableObjectProximityPositioning&amp;quot; setting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beacon-Proximity Positioning ====&lt;br /&gt;
The Beacon Proximity Mode detects if the user is in the proximity of a beacon. The proximity region is defined by a proximity distance which creates a sphere around the beacon. Whenever the calculated distance to a beacon is smaller than the proximity distance, the user is supposed to be at the position of the beacon. If multiple regions intersect the user is supposed to be at the position of the nearest beacon. &lt;br /&gt;
In order to use Beacon Proximity as a Positioning System, Bluetooth Low Energy has to be available and enabled on the mobile device. If a new environment should be equipped with iBeacon-Positioning, an expert has to mount iBeacons on known positions and calibrate the propagation factor of these beacons. Proximity beacons can be configured using [[SYSCLS_PROXIMITY_BEACON]]. {{Version/WinXSince|UWP}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Finding Objects ==&lt;br /&gt;
=== Free Text Search ===&lt;br /&gt;
&lt;br /&gt;
=== ID Marker ===&lt;br /&gt;
&lt;br /&gt;
=== QR Code ===&lt;br /&gt;
&lt;br /&gt;
=== Bar Code ===&lt;br /&gt;
&lt;br /&gt;
=== RFID Code ===&lt;br /&gt;
Provides a fast and convenient way for users to find objects that are identifiable through [[RFID tags|RFID tags]].&lt;br /&gt;
&lt;br /&gt;
=== OCR ===&lt;br /&gt;
&lt;br /&gt;
== Linked objects == &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
It is possible to display values of linked objects by using the &amp;quot;LinkedLevel&amp;quot; property. An example can be seen here, where Items[0] is a Guid property linking to another object. The ItemsControl then binds to the Properties of the linked object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid DataContext=&amp;quot;{Binding Properties.Items[0].LinkedLevel}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ItemsControl ItemsSource=&amp;quot;{Binding Properties.AllItems}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Client_Feature_Table]]&lt;br /&gt;
* [[SYSCLS_DOCUMENT_FITMODE]]&lt;br /&gt;
* [[SYSCLS_SHOWDOCUMENTS]]&lt;br /&gt;
* [[SYSCLS_SHOWPROPERTIES]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=29714</id>
		<title>Converters In Mobile</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=Converters_In_Mobile&amp;diff=29714"/>
				<updated>2026-04-20T13:19:26Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* List of Available Converters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Converters''' are used to prepare application data to format a UI defined by a XAML markup. These converters make it possible to show elements only when specific conditions (like data being available) are met. This allows the creation of a good UI with XAML code only, improving code readability while also decreasing code complexity.&lt;br /&gt;
&lt;br /&gt;
This page explains how to properly use converters for customizing the UBIK Mobile User Interface. Furthermore, all available converters are listed to provide a good reference.&lt;br /&gt;
&lt;br /&gt;
= Definition =&lt;br /&gt;
In Mobile clients, before converters can be used, they need to be defined in the page's ''Resources'' tag. Make sure to include the &amp;lt;code&amp;gt;UBIK.CPL.Converters&amp;lt;/code&amp;gt; namespace in the namespace definitions!&lt;br /&gt;
The following example shows how the &amp;lt;code&amp;gt;NullToBoolConverter&amp;lt;/code&amp;gt; can be defined:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The key ''NullToBool'' makes this converter accessible from the customizing in this page.&lt;br /&gt;
== Definition With Properties ==&lt;br /&gt;
In the following example, which is the same example from above, the '''StringFormatConverter''' will be additionally defined. To add more formatting possibilities, it has two extra properties, which need to be prefilled during initialization. Henceforth, these properties can be prefilled with static values or with static references.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:converters=&amp;quot;clr-namespace:UBIK.CPL.Converters;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
            &amp;lt;converters:NullToBoolConverter x:Key=&amp;quot;NullToBool&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;converters:StringFormatConverter x:Key=&amp;quot;Formatter&amp;quot; Parameter1=&amp;quot;5&amp;quot; Parameter2=&amp;quot;{Binding Children.Items.Count}&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- Cuztomizing --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Whereever this converter is used within the file it was defined in, ''Formatter'' will always have its ''Parameter1'' set to ''5'' and its ''Parameter2'' to the number of children of the currently viewed UBIK object. If this behavior is not intended, consider defining another ''StringFormatConverter'' with a '''different Key''' in the same way as shown above.&amp;lt;br/&amp;gt;&lt;br /&gt;
See below to find out how to use this converter!&lt;br /&gt;
= Usage =&lt;br /&gt;
A converter can only be used in conjunction with a &amp;lt;code&amp;gt;{Binding}&amp;lt;/code&amp;gt;. The following is an easy example, showing how the ''NullToBool'' converter, defined above, can be used.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyBindableProperty, Converter={StaticResource NullToBool}}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
If '''MyBindableProperty''' is ''null'' or an empty string, the converter will return '''true''', making the Label visible!&lt;br /&gt;
== Parameter ==&lt;br /&gt;
Some converters accept a '''ConverterParameter''', that passes additional information. Closely read the description of the available converters to find out which accept or even require a parameter to work properly. In Ubik, some converters accept a string parameter, consisting of multiple individual parameters separated by &amp;lt;code&amp;gt;|&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
An example of this behavior is the '''ContainsToBoolConverter''', which checks if the current value is contained within a collection of values (passed as the ''parameter''):&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;My Text&amp;quot; IsVisible=&amp;quot;{Binding MyValue, Converter={StaticResource ContainsToBool}, ConverterParameter=1|2|3|4|5|6|7|8|9}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
The label will only be visible if the ''MyValue'' property (which is expected to parse as an Integer in this example) is one of the values of the parameter.&amp;lt;br/&amp;gt;&lt;br /&gt;
Again, to get the converter working, don't forget to define it in the page's resources!&lt;br /&gt;
&lt;br /&gt;
== FallbackValue ==&lt;br /&gt;
In some rare cases, a converter might not return anything desired (like ''null'') if some condition doesn't work out as it should (e.g. ''value'' is ''null''). To still be able to get a usable return value, it's possible to define a '''FallbackValue'''.&lt;br /&gt;
&lt;br /&gt;
== Example Usage of StringFormatConverter ==&lt;br /&gt;
This converter can take up to two additional parameters during definition. Please see [[#Definition With Properties|Definition With Properties]] for more information!&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Label Text=&amp;quot;{Binding MyValue, Converter={StaticResource Formatter}, ConverterParameter=The Value of my value is \{0\}\, compared to \{1\} and \{2\}!}&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
It's important to note that special characters, like &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;,&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, need to be escaped using a &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;\&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, else the expression will be wrongly interpreted (and nothing happens)!&lt;br /&gt;
&lt;br /&gt;
The text of the '''ConverterParameter''' will be analyzed, and any occurrance (including duplicates) of &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{1}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{2}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; replaced with the '''binding value''', '''Formatter.Parameter1''' and '''Formatter.Parameter2''' respectively!&lt;br /&gt;
&lt;br /&gt;
Make sure to note, that Maui has a native '''[https://learn.microsoft.com/en-us/dotnet/maui/fundamentals/data-binding/string-formatting?view=net-maui-9.0 string formatting]''' option as well, that is probably way faster than using a converter for it. Furthermore, it supports formatting options!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Data Source =&lt;br /&gt;
Although technically not a converter, the '''SfDataSourceExt''' control is currently on the way of replacing the '''SfDataSourceConverter''', due to improved performance.&lt;br /&gt;
The usage is pretty simple: Similar to the converters, it needs to be defined in the '''Page Resources'''. Then, a '''Key''' and '''Expression''', as well as an '''ItemsSource''' have to be defined. Last, but not least, the the converter can be used within the '''ItemsSource''' property of a Syncfusion '''SfListView'''. See the following example:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Mobile(Xamarin):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ContentView x:Class=&amp;quot;UBIK.CPL.Resources.UBIKChildArea&amp;quot; &lt;br /&gt;
    xmlns=&amp;quot;http://xamarin.com/schemas/2014/forms&amp;quot; &lt;br /&gt;
    xmlns:x=&amp;quot;http://schemas.microsoft.com/winfx/2009/xaml&amp;quot; &lt;br /&gt;
    xmlns:controls=&amp;quot;clr-namespace:UBIK.CPL.Controls;assembly=UBIK.CPL&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ContentView.Resources&amp;gt;&lt;br /&gt;
        &amp;lt;ResourceDictionary&amp;gt;&lt;br /&gt;
             &amp;lt;controls:SfDataSourceExt&lt;br /&gt;
                x:Key=&amp;quot;MyDataSource&amp;quot;&lt;br /&gt;
                ItemsSource=&amp;quot;{Binding Children.Items}&amp;quot;&lt;br /&gt;
                Expression=&amp;quot;Item.Content.MetaUID.ToString().ToLower()==&amp;amp;quot;85a50533-3817-4a0b-84cd-615b48b62565&amp;amp;quot; &amp;amp;amp;&amp;amp;amp; Item[&amp;amp;quot;ORGA_STATUS&amp;amp;quot;]!=100&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;/ResourceDictionary&amp;gt;&lt;br /&gt;
    &amp;lt;/ContentView.Resources&amp;gt;&lt;br /&gt;
    &amp;lt;sync:SfListView&lt;br /&gt;
           x:Name=&amp;quot;ListView1&amp;quot;&lt;br /&gt;
           AllowSwiping=&amp;quot;True&amp;quot;&lt;br /&gt;
           ItemSize=&amp;quot;60&amp;quot;&lt;br /&gt;
           ItemTemplate=&amp;quot;{StaticResource ChildTemplateSelector}&amp;quot;&lt;br /&gt;
           ItemsSource=&amp;quot;{Binding DisplayItems, Source={StaticResource MyDataSource}}&amp;quot;&lt;br /&gt;
           LeftSwipeTemplate=&amp;quot;{StaticResource SwipeLeftTemplateSelector}&amp;quot;&lt;br /&gt;
           RightSwipeTemplate=&amp;quot;{StaticResource SwipeRightTemplateSelector}&amp;quot;&lt;br /&gt;
           SelectionMode=&amp;quot;None&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/ContentView&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Thanks to the given expression, filtering is applied once the data source is evaluated. It's important to have [https://www.advancedinstaller.com/user-guide/xml-escaped-chars.html XML special characters] correctly escaped, like the example shows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= List of Available Converters =&lt;br /&gt;
The following list contains all currently available converters for UBIK Mobile customizing. &lt;br /&gt;
&lt;br /&gt;
'''Two-way''' converters can be used with two-way bindings, e.g. a text-box displaying an editable value. If the value updates in the model, the text-box text changes. If the user edits the value, the value in the model behind also gets updated.&lt;br /&gt;
As a clarification, '''Value''' refers to the '''Binding Value''', and '''parameter''' to the '''ConverterParameter'''!&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Converter !! 2-Way !! Output Type || Input Type || Parameter Type || Description &lt;br /&gt;
|-&lt;br /&gt;
| BooleanConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean, String || || &lt;br /&gt;
Interprets a '''boolean value''' or a '''String value''' and returns it. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanInvertConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Boolean, String || || &lt;br /&gt;
Interprets a '''boolean value''' or a '''String value''' and converts it into its '''inverted value'''. If the value cannot be interpreted, ''false'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| BooleanToFontAttributeConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || FontAttribute || Boolean || || &lt;br /&gt;
Converts a '''boolean''' into a '''[https://docs.microsoft.com/en-us/dotnet/api/xamarin.forms.fontattributes?view=xamarin-forms font attribute]''' value. In detail, if the value is ''true'', the parameter is interpreted (''Bold'', ''Italic'', ''None'') and returned. The default returned font-attribute is ''None''.&lt;br /&gt;
|- &lt;br /&gt;
| ByteToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ImageSource || Byte[ ],&amp;lt;br/&amp;gt;Byte Stream || || &lt;br /&gt;
Converts a '''byte stream''' value into an '''image source'''.&lt;br /&gt;
|- &lt;br /&gt;
| ChildAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Child&amp;lt;wbr/&amp;gt;Area&amp;lt;wbr/&amp;gt;Template || Content&amp;lt;wbr/&amp;gt;ViewModel || || &lt;br /&gt;
Returns a '''ChildAreaTemplate''' from a '''Content&amp;lt;wbr/&amp;gt;ViewModel''' or ''null'' if the ViewModel cannot be interpreted.&lt;br /&gt;
|- &lt;br /&gt;
| ChildItem&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;To&amp;lt;wbr/&amp;gt;SfListView&amp;lt;wbr/&amp;gt;SelectionMode&amp;lt;wbr/&amp;gt;Converter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode] || ChildItem&amp;lt;wbr/&amp;gt;SelectionMode || || &lt;br /&gt;
Converts a '''ChildItem&amp;lt;wbr/&amp;gt;SelectionMode''' to a Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.SfListView~SelectionMode.html ListView&amp;lt;wbr/&amp;gt;SelectionMode]'''. Default is &amp;quot;Single&amp;quot;.&lt;br /&gt;
|- &lt;br /&gt;
| ClassificationToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || ContentViewModel || || &lt;br /&gt;
Returns a '''boolean''' indicating whether the given '''ContentViewModel''' is successfully classified.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Checks if the delivered value is '''contained''' within a collection of values (delivered in the parameter, seperated with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;). If the value is contained, ''true'' will be returned, else ''false''. The functionality is similar to the ''ContainsToVisibilityConverter'' in the WinX project.&lt;br /&gt;
|- &lt;br /&gt;
| ContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Same as the ''ContainsToBoolConverter'', but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| ContentAreaTeamplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || UBIKContentArea || ContentViewModel || || This converter is '''not yet finished''' and just returns the ''UBIKContentArea'' if the value is a ''ContentViewModel''.&lt;br /&gt;
|- &lt;br /&gt;
| StringToDateTimeTypesConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓  || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime], [https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan] || String || || &lt;br /&gt;
Converts a String to the correct DateType, which can be either '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.timespan TimeSpan]'''. If the value cannot be interpreted, the unchanged String value is returned. The Converter can also be used to convert DateTime or TimeSpan into a string. The Format will be determined by the current culture.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeOffsetToDateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || [https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset] || || &lt;br /&gt;
Converts a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset DateTimeOffset]''' to the correct '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''', applied to the current date and time. If the value cannot be interpreted, a new ''DateTime'', generated from the device's current time (&amp;lt;code&amp;gt;DateTime.Now&amp;lt;/code&amp;gt;) is returned.&lt;br /&gt;
|- &lt;br /&gt;
| DateTimeToFromNowStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || [https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime] || || &lt;br /&gt;
Returns a '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' into a human-readable and easily understandable ''string message'' (the last applying one will be taken):&lt;br /&gt;
* Less than 5 minutes in the past: ''Just now''&lt;br /&gt;
* Less than 10 minutes in the past: ''A few minutes ago''&lt;br /&gt;
* Less than 1 hour in the past: ''An hour ago''&lt;br /&gt;
* Less than 23 Hours in the past: ''Some hours ago''&lt;br /&gt;
* Less than 1 day in the past: ''Yesterday''&lt;br /&gt;
* More than 1 day in the past: The ''DateTime'' value formatted according to the device's localization rules.&lt;br /&gt;
* Not interpretable: ''???''&lt;br /&gt;
|- &lt;br /&gt;
| DebugConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Object || Object || || &lt;br /&gt;
A converter returning the given value for '''debug reasons'''.&lt;br /&gt;
|- &lt;br /&gt;
| DistanceToStringConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double || || &lt;br /&gt;
Returns the given value interpreted as '''length'''. Values are returned in kilometers with two comma digits (e.g. 2.84km), values smaller than 1km are returned as meters and ''NaN'' will be returned as ''infinity''. If the value cannot be interpreted, an empty string will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| EqualityToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object,&amp;lt;br/&amp;gt;String || Object,&amp;lt;br/&amp;gt;String || &lt;br /&gt;
Returns ''true'' if the given value and parameter are '''not equal to each other''', ''false'' otherwise.&lt;br /&gt;
|- &lt;br /&gt;
| SelectionChangedEventArgsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || [https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || [https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs] || || &lt;br /&gt;
Converts an Syncfusion '''[https://help.syncfusion.com/cr/cref_files/xamarin/Syncfusion.SfListView.XForms~Syncfusion.ListView.XForms.ItemSelectionChangedEventArgs.html Item&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]''' to a '''[https://docs.microsoft.com/en-us/dotnet/api/system.windows.controls.selectionchangedeventargs List&amp;lt;wbr/&amp;gt;Selection&amp;lt;wbr/&amp;gt;Changed&amp;lt;wbr/&amp;gt;EventArgs]'''. &amp;lt;br/&amp;gt;The use-case of this converter is highly specific.&lt;br /&gt;
|- &lt;br /&gt;
| FilterCriterionToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || FilterCriterion || || &lt;br /&gt;
Converts a [[Property_Based_Content_Filters|'''FilterCriterion''']] to its value. The functionality is similar to UWP's FilterCriterionToValueConverter.&lt;br /&gt;
|- &lt;br /&gt;
| GuidPropertyValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || String || Guid || Binding, where source is ContentViewModel || &lt;br /&gt;
Returns the '''first item''' of the parameter's ''Source-ViewModel'' that '''matches the given GUID''' value. If none is found, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| IntToColorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Color || Integer || || &lt;br /&gt;
Converts an ARGB '''integer''' value to a '''color'''. If the value cannot be interpreted, the converter tries to parse the parameter as a ''color'' to return it. If everything fails, ''transparent'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Integer || Integer || &lt;br /&gt;
This converter has a '''property''' to set the '''boolean return value''', called ''LesserOrEqualReturnValue''. This property-value will be returned if the given value is '''smaller than or equal to''' the threshold (parameter, defaults to 0). If the value is '''bigger than''' the threshold, the '''inverted''' ''LesserOrEqualReturnValue'' will be returned.&amp;lt;br/&amp;gt;&lt;br /&gt;
In any other case (like the value cannot be interpreted), ''false'' is returned, so it's a good idea to set the converter's property in a way that the return is only ''true'' if you need it.&lt;br /&gt;
|- &lt;br /&gt;
| ItemCountToOverflowConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Integer || Integer || Creates a '''human-readable text''' indicating '''how many items are available'''. The value will be interpreted as the '''total item count''' and the parameter as '''overflow threshold''' (defaults to 99). &amp;lt;br/&amp;gt;If there are more items than the overflow, the overflow value with a + sign will be returned (e.g. 99+). If not, the value itself will be returned. If everything fails, ''null'' is returned.&lt;br /&gt;
|- &lt;br /&gt;
| NullToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String|| || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''true'', and everything else to ''false''.&lt;br /&gt;
|- &lt;br /&gt;
| NullToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean || Object,&amp;lt;br/&amp;gt;String || || &lt;br /&gt;
''Null'' or an '''empty string''' value get converted to ''false'', and everything else to ''true''.&lt;br /&gt;
|- &lt;br /&gt;
| PathToImageSourceValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Image Source || String || || &lt;br /&gt;
Reads the '''path''' provided as parameter and creates an '''image source''' from it.&lt;br /&gt;
|- &lt;br /&gt;
| PercentageToProgressConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Double || Integer,&amp;lt;br/&amp;gt;Double || || &lt;br /&gt;
The '''numeric value'''  (int or double), interpreted as '''percentage from 0 to 100''', get converted to a '''progress level'''  (0 to 1). Values outside this range will be contained.&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''true'' will be returned, else ''false'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
| PropertyNameExistsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean (Nullable) || ContentViewModel,&amp;lt;br/&amp;gt;IContent || || &lt;br /&gt;
Converts a property to a '''boolean''' based on its '''existence'''. If it exists, ''false'' will be returned, else ''true'' or ''null'' (if something couldn't be properly interpreted).&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
| PropertyValueToSelectiveItemConverter  || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || || &lt;br /&gt;
Converts a '''item''' of an [[Active List Client]] or a [[MetaProperty]] [[MetaProperty#Selective List|Selective List]] to its value. If none is found, null will be returned.&lt;br /&gt;
|- &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| RootAreaTemplateConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ContentView || Object || || &lt;br /&gt;
If the provided value is '''not null''', the '''UBIKRootArea template''' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveItemToValueConverter || style=&amp;quot;text-align: center;&amp;quot; | ✓ || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Boolean,&amp;lt;br/&amp;gt;String,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;Double,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;Guid,&amp;lt;br/&amp;gt;FileReferenceData,&amp;lt;br/&amp;gt;GeoData,&amp;lt;br/&amp;gt;Object || Binding, where source is ContentViewModel || &lt;br /&gt;
Converts a '''item''' of a '''selective list''' to its value. If none is found, the passed ''value'' will be returned.&lt;br /&gt;
|- &lt;br /&gt;
| SelectiveListToItemsConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || List of PropertyItems  || IPropertyItem || || &lt;br /&gt;
Returns all items from a selective list. The converter can only be used in combination with a standard MetaProperty level [[SELECTIVELIST|SelectiveList]], not with an instance level [[Active_List_Client|Active list]]. Further infos see in [[UBIK_WinX_Client_Basics#Selective_List_Properties|Selective List Properties]].&lt;br /&gt;
|- &lt;br /&gt;
| SfDataSourceConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || DataSource (for ListView) || Double || String (Expression) || &lt;br /&gt;
It's an advanced converter used for '''loading items''' and '''applying filters''' on it. It replaces to ''CollectionToViewConverter'' from the WinX.UWP project. The data source can be directly used with a ''[https://help.syncfusion.com/xamarin/sflistview/overview SfListView]''.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''This converter is obsolete!'''&amp;lt;br/&amp;gt;Use '''SfDataSourceExt''' (see [[#Data Source|Data Source]]) instead!&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Returns a '''boolean''' indicating whether the parameter string is included in the value string.&lt;br /&gt;
|- &lt;br /&gt;
| StringContainsToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || String || String || &lt;br /&gt;
Same as the ''StringContainsToBoolConverter'' but with '''inverted output'''.&lt;br /&gt;
|- &lt;br /&gt;
| StringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Object || String || Allows the creation of a '''nicely formatted ''string'' message''', similar to [https://docs.microsoft.com/en-us/dotnet/api/system.string.format C#'s String.Format method].&amp;lt;br/&amp;gt;The value will be interpreted as the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; element, and the parameter is the template string (e.g. &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;The total count is: {0}!&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;. Up to two additional parameters, named ''Parameter1'' and ''Parameter2'', can be defined at the converter declaration. Adding formatting options to the &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{0}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; notation is not possible.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Attention''', using the native '''[https://docs.microsoft.com/en-us/xamarin/xamarin-forms/app-fundamentals/data-binding/string-formatting StringFormat]''' option is not only faster, but it also offers more customizability of the value!&amp;lt;br/&amp;gt;&lt;br /&gt;
You might still want to use the ''StringFormatConverter'' in rare cases, though!&lt;br /&gt;
|- &lt;br /&gt;
| ToStringFormatConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || String || Double,&amp;lt;br/&amp;gt;Float,&amp;lt;br/&amp;gt;Integer,&amp;lt;br/&amp;gt;DateTime,&amp;lt;br/&amp;gt;String || String || Converts '''primitives''' or '''[https://docs.microsoft.com/en-us/dotnet/api/system.datetime DateTime]''' to string and allows the application of '''[https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings formatting options]''' (as parameter). &amp;lt;br/&amp;gt;Adding a &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; to the end of the format-parameter allows '''[https://docs.microsoft.com/en-us/dotnet/api/system.math.truncate truncation]''' of all decimal places.&lt;br /&gt;
|-&lt;br /&gt;
| TypeNameToBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Returns ''true'' if the type name of the value is present in the parameter-string (seperated by &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
|- &lt;br /&gt;
| TypeNameToInvertedBoolConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || Boolean || Object || String || Inverted ''TypeNameTo&amp;lt;wbr/&amp;gt;BoolConverter''.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemTemplateSelectorConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector || String || String || Chooses what '''ChildItem&amp;lt;wbr/&amp;gt;Template&amp;lt;wbr/&amp;gt;Selector''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|- &lt;br /&gt;
| DataTemplateItemsPanelConverter || style=&amp;quot;text-align: center;&amp;quot; | ✗ || ItemsPanelTemplate || Query&amp;lt;wbr/&amp;gt;Details&amp;lt;wbr/&amp;gt;Page&amp;lt;wbr/&amp;gt;ViewModel || || Chooses what '''ItemPanel&amp;lt;wbr/&amp;gt;Template''' to return. Having a parameter with the content &amp;quot;Small&amp;quot; returns the small item template selector.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Converters In Xamarin]]&lt;br /&gt;
[[Category:Mobile|Converters In Xamarin]]&lt;br /&gt;
[[Category:XAML|Converters In Xamarin]]&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
[[XAML#Converters|Converters in UWP/WinX]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client | XAML | Xamarin]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|Converters In Xamarin]]&lt;br /&gt;
[[Category:Mobile|Converters In Xamarin]]&lt;br /&gt;
[[Category:XAML|Converters In Xamarin]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29713</id>
		<title>UBIK WinX Client Basics</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29713"/>
				<updated>2026-04-20T13:16:57Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Selective List Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UBIK}} Client is the mobile application for viewing and modifying data, showing documents, starting navigation, visualizing POIs and much more.&lt;br /&gt;
&lt;br /&gt;
Client applications are available for Mobile and WinX, however the features available on each of the platform dependent applications might differ. An overview of the available features can be found in the [[Client_Feature_Table|feature comparison table]].&lt;br /&gt;
&lt;br /&gt;
== Languages ==&lt;br /&gt;
The standard {{UBIK}} client supports multiple languages listed below. {{Version/WinXSince|4.3}}&lt;br /&gt;
* Chinese (Simplified)&lt;br /&gt;
* Czech&lt;br /&gt;
* English&lt;br /&gt;
* German&lt;br /&gt;
* Polish&lt;br /&gt;
* Portuguese&lt;br /&gt;
* Spanish&lt;br /&gt;
{{Attention|As we found out, you can only switch to one of the supported languages if it is installed as a system language in the Windows &amp;quot;Preferred languages / Add a language&amp;quot; setting. For example, if you have only English installed when you install {{UBIK}}, you won't be able to switch to any other languages even if you add those later. In that case, you need to make sure your language of choice is installed in Windows first, then update or reinstall {{UBIK}}. This is a Microsoft Store practice and does not apply to clients installed through sideloading, e.g. from our AppCenter.}}&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
Users need to login in order to access confidential data, this can be done in the [[Login View]].&lt;br /&gt;
&lt;br /&gt;
=== Confirm login === &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
Certain pages might require to confirm the login data, even if the user is already logged in. This can be done in the following way: The CheckUserOfflineCommand needs to be called with the username and password as parameter, if the login was valid, the CheckUserOfflineSuccess boolean property is set to true, which causes the text &amp;quot;Login confirmed&amp;quot; to appear in the example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01User&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;User&amp;quot;&lt;br /&gt;
	Text=&amp;quot;{Binding UserName}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;PasswordBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01PW&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;Password&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;Button&lt;br /&gt;
	Command=&amp;quot;{Binding CheckUserOfflineCommand}&amp;quot;&lt;br /&gt;
	Content=&amp;quot;Confirm login&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
		&amp;lt;uc:KeyValueList&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;UserName&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01User, Path=Text}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;Password&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01PW, Path=Password}&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/uc:KeyValueList&amp;gt;&lt;br /&gt;
	&amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;TextBlock Text=&amp;quot;Login confirmed&amp;quot; Visibility=&amp;quot;{Binding AuthenticationViewModel.CheckUserOfflineSuccess, Source={StaticResource Locator}, FallbackValue=false, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Profiles ==&lt;br /&gt;
Profiles are used to store connection information for {{UBIK}} services. It specifies the location where to find the service along with other useful informations. Profiles are stored by UBIK whenever the user created connection information and stored it in the settings. However, profiles can also be created and edited with any text editor. Possible settings to be defined are:&lt;br /&gt;
* InternalConnectionSettings: Connections settings how to connect to the Content and the USAM service that has been set up.&lt;br /&gt;
** Application: the [[APPLICATION]] to use with the service&lt;br /&gt;
** AuthenticationPort: Port Number of the authentication (USAM) service (default: 777)&lt;br /&gt;
** AuthenticationProtocol: Protocol of the authentication service (default: https)&lt;br /&gt;
** AuthenticationServer: the ip address of the authentication server&lt;br /&gt;
** AuthenticationService: the path to the authentication service&lt;br /&gt;
** ContentPort: Port Number of the content service (default: 777)&lt;br /&gt;
** ContentProtocol: Protocol of the content service (default: https)&lt;br /&gt;
** ContentServer: the ip address of the content server&lt;br /&gt;
** ContentService: the path to the content service&lt;br /&gt;
** Context: the [[CONTEXT]] to use with the service&lt;br /&gt;
** SyncMode: the used sync mode (Online [= Auto], Manual, Offline; default:Online)&lt;br /&gt;
* IsDefault: true, if the profile should be the default profile&lt;br /&gt;
* Name: the name of the profile (will also be used to identify the database)&lt;br /&gt;
** If the profile name contains invalid characters like: /, &amp;quot;, &amp;lt;, &amp;gt;, ... they will be replaced with %_&lt;br /&gt;
* Project: the project name. Use this to share a single project name with more than one profile. If the project is defined, all profile with the same project will share one database.&lt;br /&gt;
* Customizing: the XAML subfolder to use for customized UI. This parameter can be used to share one single XAML customizing folder for multiple profiles.&lt;br /&gt;
* ShowHiddenSettings: show hidden settings (feault: false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Profile xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns=&amp;quot;http://schemas.datacontract.org/2004/07/UBIK.WinX.Settings&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Customizing&amp;gt;MYAPPLICATIONUI&amp;lt;/Customizing&amp;gt;&lt;br /&gt;
  &amp;lt;Description i:nil=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;InternalConnectionSettings&amp;gt;&lt;br /&gt;
    &amp;lt;Application&amp;gt;APP_DEMO&amp;lt;/Application&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationPort&amp;gt;777&amp;lt;/AuthenticationPort&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationProtocol&amp;gt;https&amp;lt;/AuthenticationProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationServer&amp;gt;80.243.175.50&amp;lt;/AuthenticationServer&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationService&amp;gt;UBIK/DBG/AUG/DEMO.250/USAM/USAM.svc&amp;lt;/AuthenticationService&amp;gt;&lt;br /&gt;
    &amp;lt;ContentPort&amp;gt;777&amp;lt;/ContentPort&amp;gt;&lt;br /&gt;
    &amp;lt;ContentProtocol&amp;gt;https&amp;lt;/ContentProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;ContentServer&amp;gt;80.243.175.50&amp;lt;/ContentServer&amp;gt;&lt;br /&gt;
    &amp;lt;ContentService&amp;gt;UBIK/DBG/AUG/DEMO.250/CONTENT/UBIKContent.svc&amp;lt;/ContentService&amp;gt;&lt;br /&gt;
    &amp;lt;Context&amp;gt;CXT_DEMO&amp;lt;/Context&amp;gt;&lt;br /&gt;
    &amp;lt;SyncMode&amp;gt;Online&amp;lt;/SyncMode&amp;gt;&lt;br /&gt;
  &amp;lt;/InternalConnectionSettings&amp;gt;&lt;br /&gt;
  &amp;lt;IsDefault&amp;gt;true&amp;lt;/IsDefault&amp;gt;&lt;br /&gt;
  &amp;lt;Name&amp;gt;DEMO.250.AT&amp;lt;/Name&amp;gt;&lt;br /&gt;
  &amp;lt;Project&amp;gt;DEMO.250&amp;lt;/Project&amp;gt;&lt;br /&gt;
  &amp;lt;ShowHiddenSettings&amp;gt;false&amp;lt;/ShowHiddenSettings&amp;gt;&lt;br /&gt;
&amp;lt;/Profile&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Content Browser ==&lt;br /&gt;
Allows to navigate through the entire data model in a hierarchical manner, as it is published by the server.&lt;br /&gt;
&lt;br /&gt;
Initially, a list of objects (&amp;quot;root objects&amp;quot;) is shown. Upon selecting an object, a new browser is opened for that object, showing details about it. When an object is selected in the content browser, it is called the browser's context. For such a contextual object, child objects and selected properties are shown. Also, there is a context menu providing actions related to the currently selected object. &lt;br /&gt;
&lt;br /&gt;
=== Status Bar ===&lt;br /&gt;
==== Saving Indicator ====&lt;br /&gt;
[[File:UI_WinX_DbSavingIndicator.PNG|300 px|thumb|border|alt=Saving Symbol|Saving Symbol]]&lt;br /&gt;
{{Version/WinXSince|2.5.4}}Whenever content is being saved into the local database (for example, after a branch is downloaded from the server), there will be a blinking symbol indicating the saving activity is happening in the background.&lt;br /&gt;
During that time, the user is advised to not logout or close the app because the content might be lost otherwise. However, it is okay to undertake other tasks such as browsing, editing or downloading branches.&lt;br /&gt;
&lt;br /&gt;
==== Uncommitted Changes Indicator ====&lt;br /&gt;
{{Version/WinXSince|4.6.0}} When there are uncommitted changes it is indicated by a button in the Status Bar displaying an icon and the number of uncommitted changes. Pressing this button opens a fly out list with all of the objects that have uncommitted changes to them. Pressing one of those list objects navigates directly to the corresponding object. The Uncommitted Changes Indicator button is only shown when there are uncommitted changes otherwise it is not visible. When in online mode all changes should be committed automatically so the Indicator is mainly useful in Manual or Offline Sync Mode.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Version/WinXSince|4.7.0}} Queries are now excluded from uncommitted changes.&lt;br /&gt;
&lt;br /&gt;
=== Child Page ===&lt;br /&gt;
&lt;br /&gt;
[[File:ChildPage.PNG|400 px|thumb|border|alt=Child Page|Child Page]]&lt;br /&gt;
&lt;br /&gt;
The child page shows the context of a selected object. &lt;br /&gt;
&lt;br /&gt;
The global status bar shows the icon, the name and the description of the selected object. An arrow on the left side allows the user to navigate back to the parent object. On the right side the currently logged-in user is indicated. By clicking on the username one is able to navigate back to the home screen or log off.&lt;br /&gt;
&lt;br /&gt;
The right side of the child page shows child objects of the current object. Each child object is represented by an icon, a name and a description. With the [[SYSCLS_CHILDINFOOWNER|child info owner classification]], one can additionally show the number of documents and regular grandchildren to be expected for a child object.&lt;br /&gt;
&lt;br /&gt;
On the left side of the child page the current object´s high priority properties are shown. By clicking on a live value property, the live value details dialog opens. By clicking on an editable [[UBIK_WinX_Client_Basics#High_priority_properties| high priority property]], an editor opens {{Version/WinXSince|2.5.4}}. If a property was edited a save button is shown in the lower left corner, allowing the user to commit the changes. If a property of a query object was edited an evaluate button is shown in the lower left corner, allowing the user to run the query with the changed propery.&lt;br /&gt;
&lt;br /&gt;
=== Properties Page ===&lt;br /&gt;
&lt;br /&gt;
On the properties page, one can see a list of all the current object's visible properties, and, given the respective rights, a possibility to edit them.&lt;br /&gt;
&lt;br /&gt;
=== Context Menu ===&lt;br /&gt;
&lt;br /&gt;
For any current object, there is a set of potential context-sensitive actions. These are displayed as buttons in the title bar, with a three-dot overflow menu button aggregating all the actions that wouldn't fit there anymore. There are many potential actions; some of them are only enabled for specifically classified objects, like objects with a geo location. Default actions are refresh, various download options, child object creation, copy/paste, commit/revert changes, geo-related actions, etc.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
==== Root objects vs child objects ====&lt;br /&gt;
&lt;br /&gt;
The first entry point in the ''Content Browser'' is the list of root objects.&lt;br /&gt;
&lt;br /&gt;
==== Task objects ====&lt;br /&gt;
&lt;br /&gt;
[[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Task|Tasks]] and [[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Work_Package|work packages]] are special types of {{UBIK}} objects used for maintenance, repair and overhaul (MRO) use-cases.&lt;br /&gt;
&lt;br /&gt;
==== Query objects ====&lt;br /&gt;
&lt;br /&gt;
Queries are special types of {{UBIK}} objects with dynamic children. The child objects are looked up depending on the query object's criteria, which can be specified the same as property values for regular objects. There are [[QUERY|online queries]] evaluated by the server, and [[https://wiki.augmensys.com/index.php?title=Offline_Query_(UBIK_WinX)|offline queries]] evaluated on the client, thus requiring no internet connection.&lt;br /&gt;
&lt;br /&gt;
==== Safety relevant objects ====&lt;br /&gt;
&lt;br /&gt;
Object classified as [[SYSCLS_SAFETY_RELEVANT_OBJECT|safety relevant]] require the user to accept safety instructions to access the object, which can be required for hazardous MRO tasks, for example.&lt;br /&gt;
&lt;br /&gt;
==== Commissioning objects ====&lt;br /&gt;
&lt;br /&gt;
Similar to and based on MRO objects, commissioning objects are tasks and work packages for the commissioning use-case, e.g., [[SYSCLS_COMMISSIONINGCHECK|commissioning check tasks]].&lt;br /&gt;
&lt;br /&gt;
==== Locked objects  ====&lt;br /&gt;
In several use-cases, objects can be [[Locked_Objects|locked]] for editing.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Authentication Properties ====&lt;br /&gt;
[[SYSCLS_REQUIRE_AUTHENTICATION|Authentication Properties]] are properties which need a user authentication (through a password field) to be edited.&lt;br /&gt;
&lt;br /&gt;
==== Min max properties ====&lt;br /&gt;
See [[Min_Max_Properties]].&lt;br /&gt;
&lt;br /&gt;
==== Live value properties ====&lt;br /&gt;
[[Live_Values]] are specific property values extracted from a process control system like OPC-UA or OSIPI. &lt;br /&gt;
&lt;br /&gt;
==== High priority properties ====&lt;br /&gt;
High priority properties are properties having a priority higher than the [[Settings#Content |priority threshold]].&lt;br /&gt;
&lt;br /&gt;
==== Selective List Properties ====&lt;br /&gt;
For some properties, the user should be able to select from a predefined set of values. Such a predefined set is called a &amp;quot;selective list&amp;quot; in {{UBIK}}.&lt;br /&gt;
Furthermore, there are [[Dynamic_Selective_List_(Client)|dynamic selective lists]] that can be filtered or assembled based on dependency property values.&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
{{Hint|{{Version/WinXSince|5.1.0.0}}{{Version/MobileSince|5.1.0.0}} The ItemsSource binding of related WinX/Mobile controls in Xaml now requires only '''PropertyViewModel.SelectiveItems''', which will return the items of an [[Active_List_Client|ActiveList]], or the items of a MetaProperty.SelectiveList, depending on the server-side configuration. In this case, the SelectiveListToItemsConverter is outdated and should not be used anymore.}}&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
==== Properties with value records {{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
[[File:UI_WinX_PropertyWithValueRecords.png|thumb|A property with value records]]&lt;br /&gt;
[[File:UI_WinX_PropertyValueRecords.png|thumb|Property value records dialog]]&lt;br /&gt;
In addition to its value, a property might also bring along a series of value records showing &amp;quot;who changed the value at what time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When such records exist, the property row shows a special symbol on the right side. After a right click (with mouse) or a long tap (with touch) on the property row, a dialog will be shown to present these records (sorted by their time, recent ones on top).&lt;br /&gt;
&lt;br /&gt;
==== String properties with length restrictions ====&lt;br /&gt;
A string property can be configured with a [[MetaProperty#Text_2|length restriction]]. The client property editing UI doesn't allow users to confirm values exceeding the limit.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
==== [[Editors]] ====&lt;br /&gt;
&lt;br /&gt;
See [[Editors]]&lt;br /&gt;
&lt;br /&gt;
=== Documents ===&lt;br /&gt;
UBIK supports and displays document objects and a bunch of actions related to them (editing, redlining, creation, thumbnails, ...).&lt;br /&gt;
See [[Documents_(Client)|Documents (Client)]]&lt;br /&gt;
&lt;br /&gt;
==== Fit Mode{{Version/WinXSince|3.5}} ====&lt;br /&gt;
See [[Documents_(Client)#Fit_Mode|Fit Mode]]&lt;br /&gt;
&lt;br /&gt;
==== Auto zoom {{Version/WinXSince|4.6}}{{Version/XamarinSince|4.6}} ====&lt;br /&gt;
See [[Documents_(Client)#Auto_zoom|Auto zoom]]&lt;br /&gt;
&lt;br /&gt;
==== Editing{{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
See [[Documents_(Client)#Editing|Editing]]&lt;br /&gt;
&lt;br /&gt;
==== Offline availability ====&lt;br /&gt;
See [[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
==== Clear Online Documents ====&lt;br /&gt;
[[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
== AR Features ==&lt;br /&gt;
&lt;br /&gt;
=== POI View ===&lt;br /&gt;
Brings up the POI View|Augmented Reality view and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Markerless ===&lt;br /&gt;
&lt;br /&gt;
=== Map View ===&lt;br /&gt;
Opens the Map View and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
== Positioning ==&lt;br /&gt;
{{UBIK}} clients use a [[Location_Manager|Location Manager]] in order to gain knowledge about their position, so it can help the user navigate to his/her target.&lt;br /&gt;
&lt;br /&gt;
The user can choose one of different positioning modes optimized for different environments.&lt;br /&gt;
Most of them incorporate multiple technologies for calculating positions or checking their reliability.&lt;br /&gt;
&lt;br /&gt;
=== Positioning modes ===&lt;br /&gt;
&lt;br /&gt;
* ''Use all'' - uses all available position sources&lt;br /&gt;
* ''LLA only mode'' - used for positioning using markers only&lt;br /&gt;
* ''Beacon Proximity mode'' - uses iBeacon proximity and LLA only&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
&lt;br /&gt;
==== GPS ==== &lt;br /&gt;
GPS is used as a primary positioning input source for outdoor areas. Its precision depends on the environment and satellite availability. With good circumstances, the accuracy varies between 1 and 10 meters.&lt;br /&gt;
&lt;br /&gt;
==== LLA markers ==== &lt;br /&gt;
LLA markers basically are QR codes with location data encoded into them - which can be used for positioning when they are scanned.&lt;br /&gt;
&lt;br /&gt;
==== Object Proximity Positioning ====&lt;br /&gt;
The location of nearby Geo-Objects can be used for positioning.&lt;br /&gt;
&lt;br /&gt;
The position of a Geo-Object can be used manually by pushing the button {{key press|Use Location}} in the [[UBIK_WinX_Client_Basics#Context_Menu|Context Menu]]. &lt;br /&gt;
&lt;br /&gt;
The geo information of an object gets used automatically if exactly one single object is found through scanning. If more objects are found, their geo information doesn´t get used. Scanning includes  [[UBIK Client Basics#Bar Code|Bar Code]], [[UBIK Client Basics#QR Code|QR Code]], [[UBIK Client Basics#OCR|OCR]] and [[UBIK Client Basics#RFID|RFID]]. The automatic use of Geo-Object´s location can be turned off by disabling the &amp;quot;EnableObjectProximityPositioning&amp;quot; setting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beacon-Proximity Positioning ====&lt;br /&gt;
The Beacon Proximity Mode detects if the user is in the proximity of a beacon. The proximity region is defined by a proximity distance which creates a sphere around the beacon. Whenever the calculated distance to a beacon is smaller than the proximity distance, the user is supposed to be at the position of the beacon. If multiple regions intersect the user is supposed to be at the position of the nearest beacon. &lt;br /&gt;
In order to use Beacon Proximity as a Positioning System, Bluetooth Low Energy has to be available and enabled on the mobile device. If a new environment should be equipped with iBeacon-Positioning, an expert has to mount iBeacons on known positions and calibrate the propagation factor of these beacons. Proximity beacons can be configured using [[SYSCLS_PROXIMITY_BEACON]]. {{Version/WinXSince|UWP}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Finding Objects ==&lt;br /&gt;
=== Free Text Search ===&lt;br /&gt;
&lt;br /&gt;
=== ID Marker ===&lt;br /&gt;
&lt;br /&gt;
=== QR Code ===&lt;br /&gt;
&lt;br /&gt;
=== Bar Code ===&lt;br /&gt;
&lt;br /&gt;
=== RFID Code ===&lt;br /&gt;
Provides a fast and convenient way for users to find objects that are identifiable through [[RFID tags|RFID tags]].&lt;br /&gt;
&lt;br /&gt;
=== OCR ===&lt;br /&gt;
&lt;br /&gt;
== Linked objects == &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
It is possible to display values of linked objects by using the &amp;quot;LinkedLevel&amp;quot; property. An example can be seen here, where Items[0] is a Guid property linking to another object. The ItemsControl then binds to the Properties of the linked object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid DataContext=&amp;quot;{Binding Properties.Items[0].LinkedLevel}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ItemsControl ItemsSource=&amp;quot;{Binding Properties.AllItems}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Client_Feature_Table]]&lt;br /&gt;
* [[SYSCLS_DOCUMENT_FITMODE]]&lt;br /&gt;
* [[SYSCLS_SHOWDOCUMENTS]]&lt;br /&gt;
* [[SYSCLS_SHOWPROPERTIES]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29712</id>
		<title>UBIK WinX Client Basics</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29712"/>
				<updated>2026-04-20T13:09:46Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Selective List Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UBIK}} Client is the mobile application for viewing and modifying data, showing documents, starting navigation, visualizing POIs and much more.&lt;br /&gt;
&lt;br /&gt;
Client applications are available for Mobile and WinX, however the features available on each of the platform dependent applications might differ. An overview of the available features can be found in the [[Client_Feature_Table|feature comparison table]].&lt;br /&gt;
&lt;br /&gt;
== Languages ==&lt;br /&gt;
The standard {{UBIK}} client supports multiple languages listed below. {{Version/WinXSince|4.3}}&lt;br /&gt;
* Chinese (Simplified)&lt;br /&gt;
* Czech&lt;br /&gt;
* English&lt;br /&gt;
* German&lt;br /&gt;
* Polish&lt;br /&gt;
* Portuguese&lt;br /&gt;
* Spanish&lt;br /&gt;
{{Attention|As we found out, you can only switch to one of the supported languages if it is installed as a system language in the Windows &amp;quot;Preferred languages / Add a language&amp;quot; setting. For example, if you have only English installed when you install {{UBIK}}, you won't be able to switch to any other languages even if you add those later. In that case, you need to make sure your language of choice is installed in Windows first, then update or reinstall {{UBIK}}. This is a Microsoft Store practice and does not apply to clients installed through sideloading, e.g. from our AppCenter.}}&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
Users need to login in order to access confidential data, this can be done in the [[Login View]].&lt;br /&gt;
&lt;br /&gt;
=== Confirm login === &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
Certain pages might require to confirm the login data, even if the user is already logged in. This can be done in the following way: The CheckUserOfflineCommand needs to be called with the username and password as parameter, if the login was valid, the CheckUserOfflineSuccess boolean property is set to true, which causes the text &amp;quot;Login confirmed&amp;quot; to appear in the example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01User&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;User&amp;quot;&lt;br /&gt;
	Text=&amp;quot;{Binding UserName}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;PasswordBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01PW&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;Password&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;Button&lt;br /&gt;
	Command=&amp;quot;{Binding CheckUserOfflineCommand}&amp;quot;&lt;br /&gt;
	Content=&amp;quot;Confirm login&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
		&amp;lt;uc:KeyValueList&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;UserName&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01User, Path=Text}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;Password&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01PW, Path=Password}&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/uc:KeyValueList&amp;gt;&lt;br /&gt;
	&amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;TextBlock Text=&amp;quot;Login confirmed&amp;quot; Visibility=&amp;quot;{Binding AuthenticationViewModel.CheckUserOfflineSuccess, Source={StaticResource Locator}, FallbackValue=false, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Profiles ==&lt;br /&gt;
Profiles are used to store connection information for {{UBIK}} services. It specifies the location where to find the service along with other useful informations. Profiles are stored by UBIK whenever the user created connection information and stored it in the settings. However, profiles can also be created and edited with any text editor. Possible settings to be defined are:&lt;br /&gt;
* InternalConnectionSettings: Connections settings how to connect to the Content and the USAM service that has been set up.&lt;br /&gt;
** Application: the [[APPLICATION]] to use with the service&lt;br /&gt;
** AuthenticationPort: Port Number of the authentication (USAM) service (default: 777)&lt;br /&gt;
** AuthenticationProtocol: Protocol of the authentication service (default: https)&lt;br /&gt;
** AuthenticationServer: the ip address of the authentication server&lt;br /&gt;
** AuthenticationService: the path to the authentication service&lt;br /&gt;
** ContentPort: Port Number of the content service (default: 777)&lt;br /&gt;
** ContentProtocol: Protocol of the content service (default: https)&lt;br /&gt;
** ContentServer: the ip address of the content server&lt;br /&gt;
** ContentService: the path to the content service&lt;br /&gt;
** Context: the [[CONTEXT]] to use with the service&lt;br /&gt;
** SyncMode: the used sync mode (Online [= Auto], Manual, Offline; default:Online)&lt;br /&gt;
* IsDefault: true, if the profile should be the default profile&lt;br /&gt;
* Name: the name of the profile (will also be used to identify the database)&lt;br /&gt;
** If the profile name contains invalid characters like: /, &amp;quot;, &amp;lt;, &amp;gt;, ... they will be replaced with %_&lt;br /&gt;
* Project: the project name. Use this to share a single project name with more than one profile. If the project is defined, all profile with the same project will share one database.&lt;br /&gt;
* Customizing: the XAML subfolder to use for customized UI. This parameter can be used to share one single XAML customizing folder for multiple profiles.&lt;br /&gt;
* ShowHiddenSettings: show hidden settings (feault: false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Profile xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns=&amp;quot;http://schemas.datacontract.org/2004/07/UBIK.WinX.Settings&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Customizing&amp;gt;MYAPPLICATIONUI&amp;lt;/Customizing&amp;gt;&lt;br /&gt;
  &amp;lt;Description i:nil=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;InternalConnectionSettings&amp;gt;&lt;br /&gt;
    &amp;lt;Application&amp;gt;APP_DEMO&amp;lt;/Application&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationPort&amp;gt;777&amp;lt;/AuthenticationPort&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationProtocol&amp;gt;https&amp;lt;/AuthenticationProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationServer&amp;gt;80.243.175.50&amp;lt;/AuthenticationServer&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationService&amp;gt;UBIK/DBG/AUG/DEMO.250/USAM/USAM.svc&amp;lt;/AuthenticationService&amp;gt;&lt;br /&gt;
    &amp;lt;ContentPort&amp;gt;777&amp;lt;/ContentPort&amp;gt;&lt;br /&gt;
    &amp;lt;ContentProtocol&amp;gt;https&amp;lt;/ContentProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;ContentServer&amp;gt;80.243.175.50&amp;lt;/ContentServer&amp;gt;&lt;br /&gt;
    &amp;lt;ContentService&amp;gt;UBIK/DBG/AUG/DEMO.250/CONTENT/UBIKContent.svc&amp;lt;/ContentService&amp;gt;&lt;br /&gt;
    &amp;lt;Context&amp;gt;CXT_DEMO&amp;lt;/Context&amp;gt;&lt;br /&gt;
    &amp;lt;SyncMode&amp;gt;Online&amp;lt;/SyncMode&amp;gt;&lt;br /&gt;
  &amp;lt;/InternalConnectionSettings&amp;gt;&lt;br /&gt;
  &amp;lt;IsDefault&amp;gt;true&amp;lt;/IsDefault&amp;gt;&lt;br /&gt;
  &amp;lt;Name&amp;gt;DEMO.250.AT&amp;lt;/Name&amp;gt;&lt;br /&gt;
  &amp;lt;Project&amp;gt;DEMO.250&amp;lt;/Project&amp;gt;&lt;br /&gt;
  &amp;lt;ShowHiddenSettings&amp;gt;false&amp;lt;/ShowHiddenSettings&amp;gt;&lt;br /&gt;
&amp;lt;/Profile&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Content Browser ==&lt;br /&gt;
Allows to navigate through the entire data model in a hierarchical manner, as it is published by the server.&lt;br /&gt;
&lt;br /&gt;
Initially, a list of objects (&amp;quot;root objects&amp;quot;) is shown. Upon selecting an object, a new browser is opened for that object, showing details about it. When an object is selected in the content browser, it is called the browser's context. For such a contextual object, child objects and selected properties are shown. Also, there is a context menu providing actions related to the currently selected object. &lt;br /&gt;
&lt;br /&gt;
=== Status Bar ===&lt;br /&gt;
==== Saving Indicator ====&lt;br /&gt;
[[File:UI_WinX_DbSavingIndicator.PNG|300 px|thumb|border|alt=Saving Symbol|Saving Symbol]]&lt;br /&gt;
{{Version/WinXSince|2.5.4}}Whenever content is being saved into the local database (for example, after a branch is downloaded from the server), there will be a blinking symbol indicating the saving activity is happening in the background.&lt;br /&gt;
During that time, the user is advised to not logout or close the app because the content might be lost otherwise. However, it is okay to undertake other tasks such as browsing, editing or downloading branches.&lt;br /&gt;
&lt;br /&gt;
==== Uncommitted Changes Indicator ====&lt;br /&gt;
{{Version/WinXSince|4.6.0}} When there are uncommitted changes it is indicated by a button in the Status Bar displaying an icon and the number of uncommitted changes. Pressing this button opens a fly out list with all of the objects that have uncommitted changes to them. Pressing one of those list objects navigates directly to the corresponding object. The Uncommitted Changes Indicator button is only shown when there are uncommitted changes otherwise it is not visible. When in online mode all changes should be committed automatically so the Indicator is mainly useful in Manual or Offline Sync Mode.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Version/WinXSince|4.7.0}} Queries are now excluded from uncommitted changes.&lt;br /&gt;
&lt;br /&gt;
=== Child Page ===&lt;br /&gt;
&lt;br /&gt;
[[File:ChildPage.PNG|400 px|thumb|border|alt=Child Page|Child Page]]&lt;br /&gt;
&lt;br /&gt;
The child page shows the context of a selected object. &lt;br /&gt;
&lt;br /&gt;
The global status bar shows the icon, the name and the description of the selected object. An arrow on the left side allows the user to navigate back to the parent object. On the right side the currently logged-in user is indicated. By clicking on the username one is able to navigate back to the home screen or log off.&lt;br /&gt;
&lt;br /&gt;
The right side of the child page shows child objects of the current object. Each child object is represented by an icon, a name and a description. With the [[SYSCLS_CHILDINFOOWNER|child info owner classification]], one can additionally show the number of documents and regular grandchildren to be expected for a child object.&lt;br /&gt;
&lt;br /&gt;
On the left side of the child page the current object´s high priority properties are shown. By clicking on a live value property, the live value details dialog opens. By clicking on an editable [[UBIK_WinX_Client_Basics#High_priority_properties| high priority property]], an editor opens {{Version/WinXSince|2.5.4}}. If a property was edited a save button is shown in the lower left corner, allowing the user to commit the changes. If a property of a query object was edited an evaluate button is shown in the lower left corner, allowing the user to run the query with the changed propery.&lt;br /&gt;
&lt;br /&gt;
=== Properties Page ===&lt;br /&gt;
&lt;br /&gt;
On the properties page, one can see a list of all the current object's visible properties, and, given the respective rights, a possibility to edit them.&lt;br /&gt;
&lt;br /&gt;
=== Context Menu ===&lt;br /&gt;
&lt;br /&gt;
For any current object, there is a set of potential context-sensitive actions. These are displayed as buttons in the title bar, with a three-dot overflow menu button aggregating all the actions that wouldn't fit there anymore. There are many potential actions; some of them are only enabled for specifically classified objects, like objects with a geo location. Default actions are refresh, various download options, child object creation, copy/paste, commit/revert changes, geo-related actions, etc.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
==== Root objects vs child objects ====&lt;br /&gt;
&lt;br /&gt;
The first entry point in the ''Content Browser'' is the list of root objects.&lt;br /&gt;
&lt;br /&gt;
==== Task objects ====&lt;br /&gt;
&lt;br /&gt;
[[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Task|Tasks]] and [[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Work_Package|work packages]] are special types of {{UBIK}} objects used for maintenance, repair and overhaul (MRO) use-cases.&lt;br /&gt;
&lt;br /&gt;
==== Query objects ====&lt;br /&gt;
&lt;br /&gt;
Queries are special types of {{UBIK}} objects with dynamic children. The child objects are looked up depending on the query object's criteria, which can be specified the same as property values for regular objects. There are [[QUERY|online queries]] evaluated by the server, and [[https://wiki.augmensys.com/index.php?title=Offline_Query_(UBIK_WinX)|offline queries]] evaluated on the client, thus requiring no internet connection.&lt;br /&gt;
&lt;br /&gt;
==== Safety relevant objects ====&lt;br /&gt;
&lt;br /&gt;
Object classified as [[SYSCLS_SAFETY_RELEVANT_OBJECT|safety relevant]] require the user to accept safety instructions to access the object, which can be required for hazardous MRO tasks, for example.&lt;br /&gt;
&lt;br /&gt;
==== Commissioning objects ====&lt;br /&gt;
&lt;br /&gt;
Similar to and based on MRO objects, commissioning objects are tasks and work packages for the commissioning use-case, e.g., [[SYSCLS_COMMISSIONINGCHECK|commissioning check tasks]].&lt;br /&gt;
&lt;br /&gt;
==== Locked objects  ====&lt;br /&gt;
In several use-cases, objects can be [[Locked_Objects|locked]] for editing.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Authentication Properties ====&lt;br /&gt;
[[SYSCLS_REQUIRE_AUTHENTICATION|Authentication Properties]] are properties which need a user authentication (through a password field) to be edited.&lt;br /&gt;
&lt;br /&gt;
==== Min max properties ====&lt;br /&gt;
See [[Min_Max_Properties]].&lt;br /&gt;
&lt;br /&gt;
==== Live value properties ====&lt;br /&gt;
[[Live_Values]] are specific property values extracted from a process control system like OPC-UA or OSIPI. &lt;br /&gt;
&lt;br /&gt;
==== High priority properties ====&lt;br /&gt;
High priority properties are properties having a priority higher than the [[Settings#Content |priority threshold]].&lt;br /&gt;
&lt;br /&gt;
==== Selective List Properties ====&lt;br /&gt;
For some properties, the user should be able to select from a predefined set of values. Such a predefined set is called a &amp;quot;selective list&amp;quot; in {{UBIK}}.&lt;br /&gt;
Furthermore, there are [[Dynamic_Selective_List_(Client)|dynamic selective lists]] that can be filtered or assembled based on dependency property values.&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
{{Hint|{{Version/WinXSince|5.1.0.0}}{{Version/MobileSince|5.1.0.0}} The ItemsSource binding of related WinX/Mobile controls in Xaml now requires only PropertyViewModel.SelectiveItems, which will return the items of an [[Active_List_Client|ActiveList]] or of MetaProperty.SelectiveList without a SelectiveListToItemsConverter required.}}&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
==== Properties with value records {{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
[[File:UI_WinX_PropertyWithValueRecords.png|thumb|A property with value records]]&lt;br /&gt;
[[File:UI_WinX_PropertyValueRecords.png|thumb|Property value records dialog]]&lt;br /&gt;
In addition to its value, a property might also bring along a series of value records showing &amp;quot;who changed the value at what time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When such records exist, the property row shows a special symbol on the right side. After a right click (with mouse) or a long tap (with touch) on the property row, a dialog will be shown to present these records (sorted by their time, recent ones on top).&lt;br /&gt;
&lt;br /&gt;
==== String properties with length restrictions ====&lt;br /&gt;
A string property can be configured with a [[MetaProperty#Text_2|length restriction]]. The client property editing UI doesn't allow users to confirm values exceeding the limit.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
==== [[Editors]] ====&lt;br /&gt;
&lt;br /&gt;
See [[Editors]]&lt;br /&gt;
&lt;br /&gt;
=== Documents ===&lt;br /&gt;
UBIK supports and displays document objects and a bunch of actions related to them (editing, redlining, creation, thumbnails, ...).&lt;br /&gt;
See [[Documents_(Client)|Documents (Client)]]&lt;br /&gt;
&lt;br /&gt;
==== Fit Mode{{Version/WinXSince|3.5}} ====&lt;br /&gt;
See [[Documents_(Client)#Fit_Mode|Fit Mode]]&lt;br /&gt;
&lt;br /&gt;
==== Auto zoom {{Version/WinXSince|4.6}}{{Version/XamarinSince|4.6}} ====&lt;br /&gt;
See [[Documents_(Client)#Auto_zoom|Auto zoom]]&lt;br /&gt;
&lt;br /&gt;
==== Editing{{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
See [[Documents_(Client)#Editing|Editing]]&lt;br /&gt;
&lt;br /&gt;
==== Offline availability ====&lt;br /&gt;
See [[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
==== Clear Online Documents ====&lt;br /&gt;
[[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
== AR Features ==&lt;br /&gt;
&lt;br /&gt;
=== POI View ===&lt;br /&gt;
Brings up the POI View|Augmented Reality view and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Markerless ===&lt;br /&gt;
&lt;br /&gt;
=== Map View ===&lt;br /&gt;
Opens the Map View and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
== Positioning ==&lt;br /&gt;
{{UBIK}} clients use a [[Location_Manager|Location Manager]] in order to gain knowledge about their position, so it can help the user navigate to his/her target.&lt;br /&gt;
&lt;br /&gt;
The user can choose one of different positioning modes optimized for different environments.&lt;br /&gt;
Most of them incorporate multiple technologies for calculating positions or checking their reliability.&lt;br /&gt;
&lt;br /&gt;
=== Positioning modes ===&lt;br /&gt;
&lt;br /&gt;
* ''Use all'' - uses all available position sources&lt;br /&gt;
* ''LLA only mode'' - used for positioning using markers only&lt;br /&gt;
* ''Beacon Proximity mode'' - uses iBeacon proximity and LLA only&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
&lt;br /&gt;
==== GPS ==== &lt;br /&gt;
GPS is used as a primary positioning input source for outdoor areas. Its precision depends on the environment and satellite availability. With good circumstances, the accuracy varies between 1 and 10 meters.&lt;br /&gt;
&lt;br /&gt;
==== LLA markers ==== &lt;br /&gt;
LLA markers basically are QR codes with location data encoded into them - which can be used for positioning when they are scanned.&lt;br /&gt;
&lt;br /&gt;
==== Object Proximity Positioning ====&lt;br /&gt;
The location of nearby Geo-Objects can be used for positioning.&lt;br /&gt;
&lt;br /&gt;
The position of a Geo-Object can be used manually by pushing the button {{key press|Use Location}} in the [[UBIK_WinX_Client_Basics#Context_Menu|Context Menu]]. &lt;br /&gt;
&lt;br /&gt;
The geo information of an object gets used automatically if exactly one single object is found through scanning. If more objects are found, their geo information doesn´t get used. Scanning includes  [[UBIK Client Basics#Bar Code|Bar Code]], [[UBIK Client Basics#QR Code|QR Code]], [[UBIK Client Basics#OCR|OCR]] and [[UBIK Client Basics#RFID|RFID]]. The automatic use of Geo-Object´s location can be turned off by disabling the &amp;quot;EnableObjectProximityPositioning&amp;quot; setting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beacon-Proximity Positioning ====&lt;br /&gt;
The Beacon Proximity Mode detects if the user is in the proximity of a beacon. The proximity region is defined by a proximity distance which creates a sphere around the beacon. Whenever the calculated distance to a beacon is smaller than the proximity distance, the user is supposed to be at the position of the beacon. If multiple regions intersect the user is supposed to be at the position of the nearest beacon. &lt;br /&gt;
In order to use Beacon Proximity as a Positioning System, Bluetooth Low Energy has to be available and enabled on the mobile device. If a new environment should be equipped with iBeacon-Positioning, an expert has to mount iBeacons on known positions and calibrate the propagation factor of these beacons. Proximity beacons can be configured using [[SYSCLS_PROXIMITY_BEACON]]. {{Version/WinXSince|UWP}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Finding Objects ==&lt;br /&gt;
=== Free Text Search ===&lt;br /&gt;
&lt;br /&gt;
=== ID Marker ===&lt;br /&gt;
&lt;br /&gt;
=== QR Code ===&lt;br /&gt;
&lt;br /&gt;
=== Bar Code ===&lt;br /&gt;
&lt;br /&gt;
=== RFID Code ===&lt;br /&gt;
Provides a fast and convenient way for users to find objects that are identifiable through [[RFID tags|RFID tags]].&lt;br /&gt;
&lt;br /&gt;
=== OCR ===&lt;br /&gt;
&lt;br /&gt;
== Linked objects == &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
It is possible to display values of linked objects by using the &amp;quot;LinkedLevel&amp;quot; property. An example can be seen here, where Items[0] is a Guid property linking to another object. The ItemsControl then binds to the Properties of the linked object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid DataContext=&amp;quot;{Binding Properties.Items[0].LinkedLevel}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ItemsControl ItemsSource=&amp;quot;{Binding Properties.AllItems}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Client_Feature_Table]]&lt;br /&gt;
* [[SYSCLS_DOCUMENT_FITMODE]]&lt;br /&gt;
* [[SYSCLS_SHOWDOCUMENTS]]&lt;br /&gt;
* [[SYSCLS_SHOWPROPERTIES]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	<entry>
		<id>https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29711</id>
		<title>UBIK WinX Client Basics</title>
		<link rel="alternate" type="text/html" href="https://wiki.augmensys.com/index.php?title=UBIK_WinX_Client_Basics&amp;diff=29711"/>
				<updated>2026-04-20T13:09:26Z</updated>
		
		<summary type="html">&lt;p&gt;CWI: /* Selective List Properties */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{UBIK}} Client is the mobile application for viewing and modifying data, showing documents, starting navigation, visualizing POIs and much more.&lt;br /&gt;
&lt;br /&gt;
Client applications are available for Mobile and WinX, however the features available on each of the platform dependent applications might differ. An overview of the available features can be found in the [[Client_Feature_Table|feature comparison table]].&lt;br /&gt;
&lt;br /&gt;
== Languages ==&lt;br /&gt;
The standard {{UBIK}} client supports multiple languages listed below. {{Version/WinXSince|4.3}}&lt;br /&gt;
* Chinese (Simplified)&lt;br /&gt;
* Czech&lt;br /&gt;
* English&lt;br /&gt;
* German&lt;br /&gt;
* Polish&lt;br /&gt;
* Portuguese&lt;br /&gt;
* Spanish&lt;br /&gt;
{{Attention|As we found out, you can only switch to one of the supported languages if it is installed as a system language in the Windows &amp;quot;Preferred languages / Add a language&amp;quot; setting. For example, if you have only English installed when you install {{UBIK}}, you won't be able to switch to any other languages even if you add those later. In that case, you need to make sure your language of choice is installed in Windows first, then update or reinstall {{UBIK}}. This is a Microsoft Store practice and does not apply to clients installed through sideloading, e.g. from our AppCenter.}}&lt;br /&gt;
&lt;br /&gt;
== Login ==&lt;br /&gt;
Users need to login in order to access confidential data, this can be done in the [[Login View]].&lt;br /&gt;
&lt;br /&gt;
=== Confirm login === &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
Certain pages might require to confirm the login data, even if the user is already logged in. This can be done in the following way: The CheckUserOfflineCommand needs to be called with the username and password as parameter, if the login was valid, the CheckUserOfflineSuccess boolean property is set to true, which causes the text &amp;quot;Login confirmed&amp;quot; to appear in the example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TextBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01User&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;User&amp;quot;&lt;br /&gt;
	Text=&amp;quot;{Binding UserName}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;PasswordBox&lt;br /&gt;
	x:Name=&amp;quot;Sign01PW&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&lt;br /&gt;
	PlaceholderText=&amp;quot;Password&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;Button&lt;br /&gt;
	Command=&amp;quot;{Binding CheckUserOfflineCommand}&amp;quot;&lt;br /&gt;
	Content=&amp;quot;Confirm login&amp;quot;&lt;br /&gt;
	DataContext=&amp;quot;{Binding AuthenticationViewModel, Source={StaticResource Locator}}&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;Button.CommandParameter&amp;gt;&lt;br /&gt;
		&amp;lt;uc:KeyValueList&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;UserName&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01User, Path=Text}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;uc:KeyValueParameter Key=&amp;quot;Password&amp;quot; Value=&amp;quot;{Binding ElementName=Sign01PW, Path=Password}&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/uc:KeyValueList&amp;gt;&lt;br /&gt;
	&amp;lt;/Button.CommandParameter&amp;gt;&lt;br /&gt;
&amp;lt;/Button&amp;gt;&lt;br /&gt;
&amp;lt;TextBlock Text=&amp;quot;Login confirmed&amp;quot; Visibility=&amp;quot;{Binding AuthenticationViewModel.CheckUserOfflineSuccess, Source={StaticResource Locator}, FallbackValue=false, Converter={StaticResource BoolToVisConverter}}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Profiles ==&lt;br /&gt;
Profiles are used to store connection information for {{UBIK}} services. It specifies the location where to find the service along with other useful informations. Profiles are stored by UBIK whenever the user created connection information and stored it in the settings. However, profiles can also be created and edited with any text editor. Possible settings to be defined are:&lt;br /&gt;
* InternalConnectionSettings: Connections settings how to connect to the Content and the USAM service that has been set up.&lt;br /&gt;
** Application: the [[APPLICATION]] to use with the service&lt;br /&gt;
** AuthenticationPort: Port Number of the authentication (USAM) service (default: 777)&lt;br /&gt;
** AuthenticationProtocol: Protocol of the authentication service (default: https)&lt;br /&gt;
** AuthenticationServer: the ip address of the authentication server&lt;br /&gt;
** AuthenticationService: the path to the authentication service&lt;br /&gt;
** ContentPort: Port Number of the content service (default: 777)&lt;br /&gt;
** ContentProtocol: Protocol of the content service (default: https)&lt;br /&gt;
** ContentServer: the ip address of the content server&lt;br /&gt;
** ContentService: the path to the content service&lt;br /&gt;
** Context: the [[CONTEXT]] to use with the service&lt;br /&gt;
** SyncMode: the used sync mode (Online [= Auto], Manual, Offline; default:Online)&lt;br /&gt;
* IsDefault: true, if the profile should be the default profile&lt;br /&gt;
* Name: the name of the profile (will also be used to identify the database)&lt;br /&gt;
** If the profile name contains invalid characters like: /, &amp;quot;, &amp;lt;, &amp;gt;, ... they will be replaced with %_&lt;br /&gt;
* Project: the project name. Use this to share a single project name with more than one profile. If the project is defined, all profile with the same project will share one database.&lt;br /&gt;
* Customizing: the XAML subfolder to use for customized UI. This parameter can be used to share one single XAML customizing folder for multiple profiles.&lt;br /&gt;
* ShowHiddenSettings: show hidden settings (feault: false)&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;Profile xmlns:i=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot; xmlns=&amp;quot;http://schemas.datacontract.org/2004/07/UBIK.WinX.Settings&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;Customizing&amp;gt;MYAPPLICATIONUI&amp;lt;/Customizing&amp;gt;&lt;br /&gt;
  &amp;lt;Description i:nil=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;InternalConnectionSettings&amp;gt;&lt;br /&gt;
    &amp;lt;Application&amp;gt;APP_DEMO&amp;lt;/Application&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationPort&amp;gt;777&amp;lt;/AuthenticationPort&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationProtocol&amp;gt;https&amp;lt;/AuthenticationProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationServer&amp;gt;80.243.175.50&amp;lt;/AuthenticationServer&amp;gt;&lt;br /&gt;
    &amp;lt;AuthenticationService&amp;gt;UBIK/DBG/AUG/DEMO.250/USAM/USAM.svc&amp;lt;/AuthenticationService&amp;gt;&lt;br /&gt;
    &amp;lt;ContentPort&amp;gt;777&amp;lt;/ContentPort&amp;gt;&lt;br /&gt;
    &amp;lt;ContentProtocol&amp;gt;https&amp;lt;/ContentProtocol&amp;gt;&lt;br /&gt;
    &amp;lt;ContentServer&amp;gt;80.243.175.50&amp;lt;/ContentServer&amp;gt;&lt;br /&gt;
    &amp;lt;ContentService&amp;gt;UBIK/DBG/AUG/DEMO.250/CONTENT/UBIKContent.svc&amp;lt;/ContentService&amp;gt;&lt;br /&gt;
    &amp;lt;Context&amp;gt;CXT_DEMO&amp;lt;/Context&amp;gt;&lt;br /&gt;
    &amp;lt;SyncMode&amp;gt;Online&amp;lt;/SyncMode&amp;gt;&lt;br /&gt;
  &amp;lt;/InternalConnectionSettings&amp;gt;&lt;br /&gt;
  &amp;lt;IsDefault&amp;gt;true&amp;lt;/IsDefault&amp;gt;&lt;br /&gt;
  &amp;lt;Name&amp;gt;DEMO.250.AT&amp;lt;/Name&amp;gt;&lt;br /&gt;
  &amp;lt;Project&amp;gt;DEMO.250&amp;lt;/Project&amp;gt;&lt;br /&gt;
  &amp;lt;ShowHiddenSettings&amp;gt;false&amp;lt;/ShowHiddenSettings&amp;gt;&lt;br /&gt;
&amp;lt;/Profile&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Content Browser ==&lt;br /&gt;
Allows to navigate through the entire data model in a hierarchical manner, as it is published by the server.&lt;br /&gt;
&lt;br /&gt;
Initially, a list of objects (&amp;quot;root objects&amp;quot;) is shown. Upon selecting an object, a new browser is opened for that object, showing details about it. When an object is selected in the content browser, it is called the browser's context. For such a contextual object, child objects and selected properties are shown. Also, there is a context menu providing actions related to the currently selected object. &lt;br /&gt;
&lt;br /&gt;
=== Status Bar ===&lt;br /&gt;
==== Saving Indicator ====&lt;br /&gt;
[[File:UI_WinX_DbSavingIndicator.PNG|300 px|thumb|border|alt=Saving Symbol|Saving Symbol]]&lt;br /&gt;
{{Version/WinXSince|2.5.4}}Whenever content is being saved into the local database (for example, after a branch is downloaded from the server), there will be a blinking symbol indicating the saving activity is happening in the background.&lt;br /&gt;
During that time, the user is advised to not logout or close the app because the content might be lost otherwise. However, it is okay to undertake other tasks such as browsing, editing or downloading branches.&lt;br /&gt;
&lt;br /&gt;
==== Uncommitted Changes Indicator ====&lt;br /&gt;
{{Version/WinXSince|4.6.0}} When there are uncommitted changes it is indicated by a button in the Status Bar displaying an icon and the number of uncommitted changes. Pressing this button opens a fly out list with all of the objects that have uncommitted changes to them. Pressing one of those list objects navigates directly to the corresponding object. The Uncommitted Changes Indicator button is only shown when there are uncommitted changes otherwise it is not visible. When in online mode all changes should be committed automatically so the Indicator is mainly useful in Manual or Offline Sync Mode.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
{{Version/WinXSince|4.7.0}} Queries are now excluded from uncommitted changes.&lt;br /&gt;
&lt;br /&gt;
=== Child Page ===&lt;br /&gt;
&lt;br /&gt;
[[File:ChildPage.PNG|400 px|thumb|border|alt=Child Page|Child Page]]&lt;br /&gt;
&lt;br /&gt;
The child page shows the context of a selected object. &lt;br /&gt;
&lt;br /&gt;
The global status bar shows the icon, the name and the description of the selected object. An arrow on the left side allows the user to navigate back to the parent object. On the right side the currently logged-in user is indicated. By clicking on the username one is able to navigate back to the home screen or log off.&lt;br /&gt;
&lt;br /&gt;
The right side of the child page shows child objects of the current object. Each child object is represented by an icon, a name and a description. With the [[SYSCLS_CHILDINFOOWNER|child info owner classification]], one can additionally show the number of documents and regular grandchildren to be expected for a child object.&lt;br /&gt;
&lt;br /&gt;
On the left side of the child page the current object´s high priority properties are shown. By clicking on a live value property, the live value details dialog opens. By clicking on an editable [[UBIK_WinX_Client_Basics#High_priority_properties| high priority property]], an editor opens {{Version/WinXSince|2.5.4}}. If a property was edited a save button is shown in the lower left corner, allowing the user to commit the changes. If a property of a query object was edited an evaluate button is shown in the lower left corner, allowing the user to run the query with the changed propery.&lt;br /&gt;
&lt;br /&gt;
=== Properties Page ===&lt;br /&gt;
&lt;br /&gt;
On the properties page, one can see a list of all the current object's visible properties, and, given the respective rights, a possibility to edit them.&lt;br /&gt;
&lt;br /&gt;
=== Context Menu ===&lt;br /&gt;
&lt;br /&gt;
For any current object, there is a set of potential context-sensitive actions. These are displayed as buttons in the title bar, with a three-dot overflow menu button aggregating all the actions that wouldn't fit there anymore. There are many potential actions; some of them are only enabled for specifically classified objects, like objects with a geo location. Default actions are refresh, various download options, child object creation, copy/paste, commit/revert changes, geo-related actions, etc.&lt;br /&gt;
&lt;br /&gt;
=== Objects ===&lt;br /&gt;
&lt;br /&gt;
==== Root objects vs child objects ====&lt;br /&gt;
&lt;br /&gt;
The first entry point in the ''Content Browser'' is the list of root objects.&lt;br /&gt;
&lt;br /&gt;
==== Task objects ====&lt;br /&gt;
&lt;br /&gt;
[[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Task|Tasks]] and [[https://wiki.augmensys.com/index.php?title=MRO_Objects_(Client)#Work_Package|work packages]] are special types of {{UBIK}} objects used for maintenance, repair and overhaul (MRO) use-cases.&lt;br /&gt;
&lt;br /&gt;
==== Query objects ====&lt;br /&gt;
&lt;br /&gt;
Queries are special types of {{UBIK}} objects with dynamic children. The child objects are looked up depending on the query object's criteria, which can be specified the same as property values for regular objects. There are [[QUERY|online queries]] evaluated by the server, and [[https://wiki.augmensys.com/index.php?title=Offline_Query_(UBIK_WinX)|offline queries]] evaluated on the client, thus requiring no internet connection.&lt;br /&gt;
&lt;br /&gt;
==== Safety relevant objects ====&lt;br /&gt;
&lt;br /&gt;
Object classified as [[SYSCLS_SAFETY_RELEVANT_OBJECT|safety relevant]] require the user to accept safety instructions to access the object, which can be required for hazardous MRO tasks, for example.&lt;br /&gt;
&lt;br /&gt;
==== Commissioning objects ====&lt;br /&gt;
&lt;br /&gt;
Similar to and based on MRO objects, commissioning objects are tasks and work packages for the commissioning use-case, e.g., [[SYSCLS_COMMISSIONINGCHECK|commissioning check tasks]].&lt;br /&gt;
&lt;br /&gt;
==== Locked objects  ====&lt;br /&gt;
In several use-cases, objects can be [[Locked_Objects|locked]] for editing.&lt;br /&gt;
&lt;br /&gt;
=== Properties ===&lt;br /&gt;
&lt;br /&gt;
==== Authentication Properties ====&lt;br /&gt;
[[SYSCLS_REQUIRE_AUTHENTICATION|Authentication Properties]] are properties which need a user authentication (through a password field) to be edited.&lt;br /&gt;
&lt;br /&gt;
==== Min max properties ====&lt;br /&gt;
See [[Min_Max_Properties]].&lt;br /&gt;
&lt;br /&gt;
==== Live value properties ====&lt;br /&gt;
[[Live_Values]] are specific property values extracted from a process control system like OPC-UA or OSIPI. &lt;br /&gt;
&lt;br /&gt;
==== High priority properties ====&lt;br /&gt;
High priority properties are properties having a priority higher than the [[Settings#Content |priority threshold]].&lt;br /&gt;
&lt;br /&gt;
==== Selective List Properties ====&lt;br /&gt;
For some properties, the user should be able to select from a predefined set of values. Such a predefined set is called a &amp;quot;selective list&amp;quot; in {{UBIK}}.&lt;br /&gt;
Furthermore, there are [[Dynamic_Selective_List_(Client)|dynamic selective lists]] that can be filtered or assembled based on dependency property values.&lt;br /&gt;
&lt;br /&gt;
{{UnderConstructionStart}}&lt;br /&gt;
{{Hint|{{Version/WinXSince|5.1.0.0}}{{Version/MobileSince|5.1.0.0}} The ItemsSource binding of related WinX/Mobile controls in Xaml now requires only PropertyViewModel.SelectiveItems, which will return the items of an [[Active_List_Client|ActiveList]]or of MetaProperty.SelectiveList without a SelectiveListToItemsConverter required.}}&lt;br /&gt;
{{UnderConstructionEnd}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
==== Properties with value records {{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
[[File:UI_WinX_PropertyWithValueRecords.png|thumb|A property with value records]]&lt;br /&gt;
[[File:UI_WinX_PropertyValueRecords.png|thumb|Property value records dialog]]&lt;br /&gt;
In addition to its value, a property might also bring along a series of value records showing &amp;quot;who changed the value at what time&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When such records exist, the property row shows a special symbol on the right side. After a right click (with mouse) or a long tap (with touch) on the property row, a dialog will be shown to present these records (sorted by their time, recent ones on top).&lt;br /&gt;
&lt;br /&gt;
==== String properties with length restrictions ====&lt;br /&gt;
A string property can be configured with a [[MetaProperty#Text_2|length restriction]]. The client property editing UI doesn't allow users to confirm values exceeding the limit.&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
&lt;br /&gt;
==== [[Editors]] ====&lt;br /&gt;
&lt;br /&gt;
See [[Editors]]&lt;br /&gt;
&lt;br /&gt;
=== Documents ===&lt;br /&gt;
UBIK supports and displays document objects and a bunch of actions related to them (editing, redlining, creation, thumbnails, ...).&lt;br /&gt;
See [[Documents_(Client)|Documents (Client)]]&lt;br /&gt;
&lt;br /&gt;
==== Fit Mode{{Version/WinXSince|3.5}} ====&lt;br /&gt;
See [[Documents_(Client)#Fit_Mode|Fit Mode]]&lt;br /&gt;
&lt;br /&gt;
==== Auto zoom {{Version/WinXSince|4.6}}{{Version/XamarinSince|4.6}} ====&lt;br /&gt;
See [[Documents_(Client)#Auto_zoom|Auto zoom]]&lt;br /&gt;
&lt;br /&gt;
==== Editing{{Version/WinXSince|2.5.4}} ====&lt;br /&gt;
See [[Documents_(Client)#Editing|Editing]]&lt;br /&gt;
&lt;br /&gt;
==== Offline availability ====&lt;br /&gt;
See [[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
==== Clear Online Documents ====&lt;br /&gt;
[[Documents_(Client)#Offline/Online|Offline/Online]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;br /&gt;
&lt;br /&gt;
== AR Features ==&lt;br /&gt;
&lt;br /&gt;
=== POI View ===&lt;br /&gt;
Brings up the POI View|Augmented Reality view and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Markerless ===&lt;br /&gt;
&lt;br /&gt;
=== Map View ===&lt;br /&gt;
Opens the Map View and displays Points of Interest (POI's) related to the current location of the mobile device.&lt;br /&gt;
&lt;br /&gt;
== Positioning ==&lt;br /&gt;
{{UBIK}} clients use a [[Location_Manager|Location Manager]] in order to gain knowledge about their position, so it can help the user navigate to his/her target.&lt;br /&gt;
&lt;br /&gt;
The user can choose one of different positioning modes optimized for different environments.&lt;br /&gt;
Most of them incorporate multiple technologies for calculating positions or checking their reliability.&lt;br /&gt;
&lt;br /&gt;
=== Positioning modes ===&lt;br /&gt;
&lt;br /&gt;
* ''Use all'' - uses all available position sources&lt;br /&gt;
* ''LLA only mode'' - used for positioning using markers only&lt;br /&gt;
* ''Beacon Proximity mode'' - uses iBeacon proximity and LLA only&lt;br /&gt;
&lt;br /&gt;
=== Technologies ===&lt;br /&gt;
&lt;br /&gt;
==== GPS ==== &lt;br /&gt;
GPS is used as a primary positioning input source for outdoor areas. Its precision depends on the environment and satellite availability. With good circumstances, the accuracy varies between 1 and 10 meters.&lt;br /&gt;
&lt;br /&gt;
==== LLA markers ==== &lt;br /&gt;
LLA markers basically are QR codes with location data encoded into them - which can be used for positioning when they are scanned.&lt;br /&gt;
&lt;br /&gt;
==== Object Proximity Positioning ====&lt;br /&gt;
The location of nearby Geo-Objects can be used for positioning.&lt;br /&gt;
&lt;br /&gt;
The position of a Geo-Object can be used manually by pushing the button {{key press|Use Location}} in the [[UBIK_WinX_Client_Basics#Context_Menu|Context Menu]]. &lt;br /&gt;
&lt;br /&gt;
The geo information of an object gets used automatically if exactly one single object is found through scanning. If more objects are found, their geo information doesn´t get used. Scanning includes  [[UBIK Client Basics#Bar Code|Bar Code]], [[UBIK Client Basics#QR Code|QR Code]], [[UBIK Client Basics#OCR|OCR]] and [[UBIK Client Basics#RFID|RFID]]. The automatic use of Geo-Object´s location can be turned off by disabling the &amp;quot;EnableObjectProximityPositioning&amp;quot; setting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Beacon-Proximity Positioning ====&lt;br /&gt;
The Beacon Proximity Mode detects if the user is in the proximity of a beacon. The proximity region is defined by a proximity distance which creates a sphere around the beacon. Whenever the calculated distance to a beacon is smaller than the proximity distance, the user is supposed to be at the position of the beacon. If multiple regions intersect the user is supposed to be at the position of the nearest beacon. &lt;br /&gt;
In order to use Beacon Proximity as a Positioning System, Bluetooth Low Energy has to be available and enabled on the mobile device. If a new environment should be equipped with iBeacon-Positioning, an expert has to mount iBeacons on known positions and calibrate the propagation factor of these beacons. Proximity beacons can be configured using [[SYSCLS_PROXIMITY_BEACON]]. {{Version/WinXSince|UWP}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Finding Objects ==&lt;br /&gt;
=== Free Text Search ===&lt;br /&gt;
&lt;br /&gt;
=== ID Marker ===&lt;br /&gt;
&lt;br /&gt;
=== QR Code ===&lt;br /&gt;
&lt;br /&gt;
=== Bar Code ===&lt;br /&gt;
&lt;br /&gt;
=== RFID Code ===&lt;br /&gt;
Provides a fast and convenient way for users to find objects that are identifiable through [[RFID tags|RFID tags]].&lt;br /&gt;
&lt;br /&gt;
=== OCR ===&lt;br /&gt;
&lt;br /&gt;
== Linked objects == &lt;br /&gt;
{{Version/WinXSince|3.6}}&lt;br /&gt;
It is possible to display values of linked objects by using the &amp;quot;LinkedLevel&amp;quot; property. An example can be seen here, where Items[0] is a Guid property linking to another object. The ItemsControl then binds to the Properties of the linked object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang = &amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Grid DataContext=&amp;quot;{Binding Properties.Items[0].LinkedLevel}&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;ItemsControl ItemsSource=&amp;quot;{Binding Properties.AllItems}&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/Grid&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Client_Feature_Table]]&lt;br /&gt;
* [[SYSCLS_DOCUMENT_FITMODE]]&lt;br /&gt;
* [[SYSCLS_SHOWDOCUMENTS]]&lt;br /&gt;
* [[SYSCLS_SHOWPROPERTIES]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Client|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:How-To|UBIK WinX Client Basics]]&lt;br /&gt;
[[Category:WinX|UBIK WinX Client Basics]]&lt;/div&gt;</summary>
		<author><name>CWI</name></author>	</entry>

	</feed>