Changes
Restructured the SfPullToRefresh related content
TapGestureRecognizer blocks swipe behavior. Remove it and adapt parent list to trigger navigation. An example of such behaviors can be seen in UBIKChildArea.
=== Navigation in UBIKChildItem ===
In comparison, the old solution defines a "PopupFilterQueryItemTemplate" DataTemplate which simply wraps the needed selection related behaviors to the existing "UBIKChildItem" template. The new solution reuses the "UBIKChildItem" template directly and add the same but adapted behaviors to the list view instead.
== Mandatory ==
|}
=== Rename progress colors ===
In the above example, a previously defined formatter (that must be also added to the resource dictionary) is used to fill in the header attribute value.
⚠️ Avoid using bindings in `Parameter1` and `Parameter2` — use static strings only. For complex cases, use `EvalExpression`.
=== FontImageSource Styling ===
⚠️ Refer to [https://help.syncfusion.com/maui/tabview/migration Syncfusion migration guide] for full property list.
== SfPullToRefresh ==
'''It is recommended to get rid of all SfPullToRefresh controls due to some issues that might occur.''' For more information, see here: [insert link]. In our Maui standard client, the PullToRefresh control has been replaced by a Refresh button in the Context Menu.
{| class="wikitable"
! Xamarin
! MAUI
|-
| <syntaxhighlight lang="xml">
<pullToRefresh:SfPullToRefresh>
<pullToRefresh:SfPullToRefresh.PullableContent>
<controls:SfListViewExt
.../>
</pullToRefresh:SfPullToRefresh.PullableContent>
</pullToRefresh:SfPullToRefresh>
</syntaxhighlight>
| <syntaxhighlight lang="xml">
<controls:SfListViewExt
.../>
</syntaxhighlight>
|}
<br>
⚠️ '''If SfPullToRefresh is still required, the following points should be considered.'''
=== Namespace Update ===
'''Update Syncfusion TabView namespace.'''
Replace the Xamarin namespace with the MAUI equivalent.
{| class="wikitable"
! Xamarin
! MAUI
|-
| clr-namespace:Syncfusion.SfPullToRefresh.XForms;assembly=Syncfusion.SfPullToRefresh.XForms
| clr-namespace:Syncfusion.Maui.Toolkit.PullToRefresh;assembly=Syncfusion.Maui.Toolkit
|}
=== Rename SfPullToRefresh properties ===
'''Renamed in Maui, however, currently these properties cause an issue and should not be included in customizings.'''
SfPullToRefresh:
{| class="wikitable"
! Xamarin
! MAUI
|-
| RefreshContentHeight, RefreshContentWidth
| RefreshViewHeight, RefreshViewWidth
|}
=== Avoid multiple SfPullToRefresh controls ===
'''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.
{| class="wikitable"
! Xamarin
! MAUI
|-
| <syntaxhighlight lang="xml">
<pullToRefresh:SfPullToRefresh IsVisible = {Binding ShowContentB, Converter={StaticResource BoolToNotBool}}>
<pullToRefresh:SfPullToRefresh.PullableContent>
<controls:SfListViewExt
x:Name="ContentA"
.../>
</pullToRefresh:SfPullToRefresh.PullableContent>
</pullToRefresh:SfPullToRefresh>
<pullToRefresh:SfPullToRefresh IsVisible = {Binding ShowContentB}>
<pullToRefresh:SfPullToRefresh.PullableContent>
<controls:SfListViewExt
x:Name="ContentB"
.../>
</pullToRefresh:SfPullToRefresh.PullableContent>
</pullToRefresh:SfPullToRefresh>
</syntaxhighlight>
| <syntaxhighlight lang="xml">
<Grid>
<Grid.Resources>
<ResourceDictionary>
<DataTemplate x:Key="TemplateA">
<controls:SfListViewExt
x:Name="ContentA"
.../>
</DataTemplate>
<DataTemplate x:Key="TemplateB">
<controls:SfListViewExt
x:Name="ContentB"
.../>
</DataTemplate>
</ResourceDictionary>
</Grid.Resources>
<pullToRefresh:SfPullToRefresh>
<pullToRefresh:SfPullToRefresh.PullableContent>
<controls:ContentControl>
<controls:ContentControl.Triggers>
<DataTrigger
Binding="{Binding ShowContentB}}"
TargetType="controls:ContentControl"
Value="false">
<Setter Property="ContentTemplate" Value="{DynamicResource TemplateA}" />
</DataTrigger>
<DataTrigger
Binding="{Binding ShowContentB}}"
TargetType="controls:ContentControl"
Value="true">
<Setter Property="ContentTemplate" Value="{DynamicResource TemplateB}" />
</DataTrigger>
</controls:ContentControl.Triggers>
</controls:ContentControl>
</pullToRefresh:SfPullToRefresh.PullableContent>
</pullToRefresh:SfPullToRefresh>
</Grid>
</syntaxhighlight>
|}
=== Avoid using SyncFusion ListViews directly in SfPullToRefresh controls ===
'''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, as shown in the Xaml example below.
{| class="wikitable"
! Xamarin
! MAUI
|-
| <syntaxhighlight lang="xml">
<pullToRefresh:SfPullToRefresh>
<pullToRefresh:SfPullToRefresh.PullableContent>
<controls:SfListViewExt
.../>
</pullToRefresh:SfPullToRefresh.PullableContent>
</pullToRefresh:SfPullToRefresh>
</syntaxhighlight>
| <syntaxhighlight lang="xml">
<Grid>
<Grid.Resources>
<ResourceDictionary>
<DataTemplate x:Key="ListViewTemplate">
<controls:SfListViewExt
.../>
</DataTemplate>
</ResourceDictionary>
</Grid.Resources>
<pullToRefresh:SfPullToRefresh>
<pullToRefresh:SfPullToRefresh.PullableContent>
<controls:ContentControl ContentTemplate="{DynamicResource ListViewTemplate}" />
</pullToRefresh:SfPullToRefresh.PullableContent>
</pullToRefresh:SfPullToRefresh>
</Grid>
</syntaxhighlight>
|}
== OnPlatform + OnIdiom backup ==