In popup mode when scaling is 75%, tapping outside close to the view border does not work, the control keeps the width and height as in 100%
in drop down mode the drop-down is not close to the picker, there is a height between them.
add a button control in which you can swipe its content
Ran into this issue - which seems to be dependent on how the content gets rendered, so it will fail 100% of the time on specific configurations, resulting in unusable applications.
I've found this issue on Android but there's no telling if the issue is cross platform - as it may depend on item sizings and layout, it may also be reproducible on other platforms, I just haven't hit it yet. The device you run it on may also influence the result, as different resolutions and scalings will impact how items are rendered on screen. I've reproduced this on a Pixel 7 (real device), Samsung A21s (real device) and Pixel 7 Pro (emulator).
Repro steps
MainPage.xaml - use this as the page content:
<ScrollView Padding="15,0,15,15">
<VerticalStackLayout Spacing="25">
<telerik:RadWrapLayout
x:Name="BrokenLayout"
Margin="-5"
SizeChanged="BrokenLayout_SizeChanged"
StretchLastChild="False">
<BindableLayout.ItemTemplate>
<DataTemplate>
<Grid
Margin="3.75"
Padding="3.75"
BackgroundColor="LightGreen">
<Label
FontAttributes="Bold"
FontSize="11"
LineBreakMode="TailTruncation"
MaxLines="2"
Text="{Binding}"
VerticalOptions="End" />
</Grid>
</DataTemplate>
</BindableLayout.ItemTemplate>
</telerik:RadWrapLayout>
</VerticalStackLayout>
</ScrollView>
MainPage.xaml.cs code
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
List<string> items = new List<string>();
items.Add("TSONE");
items.Add("N ANCETOIDO");
items.Add("ADDKNEDEGO LW");
items.Add("A EFCTTLIAH");
items.Add("OHACP HTATTO");
items.Add("AASESII NAYXB/RFKL");
items.Add("EMIQULENOCE PTCTL");
items.Add("SCNSTUGRRIOEMA TEU");
items.Add("EPEENSX");
items.Add("BRUXEROL TAA");
items.Add("TVLRETAAX ER");
items.Add("SMA SELISD");
items.Add("NIAEGOEEATIRUPR SVT");
items.Add("CTPLRCELT AO");
items.Add("REAREPTIRDQ U");
items.Add("ASEDP TUR");
items.Add("CJTEUT ORPDEAP");
items.Add(" CECCRNTARODTO");
items.Add("- FLEOUTEQRUOPWSL");
items.Add("PINTRNMEU REEQTU");
items.Add("RE LWSRANKOGIO TNT");
items.Add("KAREBTA KE");
items.Add("ITTANIW MIEG"); // comment out this one and it'll run fine. keep it and it'll fail.
BindableLayout.SetItemsSource(this.BrokenLayout, items);
}
private double _width = 0;
private double minItemWidth = 110.0;
private double maxItemWidth = 160.0;
private void BrokenLayout_SizeChanged(object sender, EventArgs e)
{
if (sender is RadWrapLayout wl
&& wl.Width > 0
&& (int)Math.Floor(wl.Width) is int widthInt
&& widthInt != this._width)
{
this._width = widthInt;
double? candidateItemWidth = null;
var itemCount = wl.Children.Count;
if (itemCount > 0 && itemCount * maxItemWidth >= widthInt)
{
var columnCount = (int)Math.Ceiling(widthInt / maxItemWidth);
candidateItemWidth = (int)Math.Floor((double)widthInt / columnCount);
if (candidateItemWidth > 1.25 * maxItemWidth)
{
columnCount += 1;
candidateItemWidth = (int)Math.Floor((double)widthInt / columnCount);
}
else if (candidateItemWidth < minItemWidth)
{
columnCount -= 1;
candidateItemWidth = (int)Math.Floor((double)widthInt / columnCount);
}
}
wl.ItemWidth = candidateItemWidth ?? maxItemWidth;
}
}
}
Error:
System.ArgumentOutOfRangeException: 'Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')'
0xFFFFFFFFFFFFFFFF in Android.Runtime.RuntimeNativeMethods.monodroid_debugger_unhandled_exception C#
0x1A in Android.Runtime.JNINativeWrapper._unhandled_exception at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:12,5 C#
0x26 in Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPZIIII_V at /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:441,26 C#
0x8 in System.ThrowHelper.ThrowArgumentOutOfRange_IndexMustBeLessException C#
0x9 in System.Collections.Generic.List<double>.get_Item C#
0x205 in Telerik.Maui.RadWrapLayoutManager.ArrangeChildren C#
Currently, i can use the public method ScrollItemIntoView to scroll to an item in the DataGrid.
I noticed you have an internal method: ScrollColumnIntoView. Please make it public so I can use it to scroll to a specific column.
Regression of the following issue: Pickers: [Android] Do not display in a Shell modal page in Net 9 project
The issue happens in Telerik MAUI 11.0.0, in 10.0.0 no issues
When using a prism navigation:
await _navigationService.NavigateAsync(nameof(MainPageView));
the RadPopup will not show if its placement target is the new page.
I see iOS crashes in Sentry, seems like caused by clearing the RadCollectionView bound DataSource ObservableCollection, when an item was previously selected
Maui 9.0.70
Telerik 11.0
System.NullReferenceException: Arg_NullReferenceException
?, in void RadCollectionViewItemView.OnIsSelectedChanged()
?, in static RadCollectionViewItemView()+(BindableObject b, object o, object n) => { }
?, in void BindableObject.OnBindablePropertySet(BindableProperty property, object original, object value, bool didChange, bool willFirePropertyChanged)
?, in void Element.OnBindablePropertySet(BindableProperty property, object original, object value, bool changed, bool willFirePropertyChanged)
?, in void BindableObject.SetValueActual(BindableProperty property, BindablePropertyContext context, object value, bool currentlyApplying, SetValueFlags attributes, SetterSpecificity specificity, bool silent)
?, in void BindableObject.SetValueCore(BindableProperty property, object value, SetValueFlags attributes, SetValuePrivateFlags privateAttributes, SetterSpecificity specificity)
?, in void BindableObject.SetValue(BindableProperty property, object value)
?, in void RadCollectionViewItemView.set_IsSelected(bool value)
?, in void RadCollectionView.SelectContainers(IEnumerable items, bool select)
?, in void RadCollectionView.SelectionHelperSelectionChanged(object sender, RadSelectionChangedEventArgs e)
?, in void <>c__DisplayClass36_0.<SelectionChangerSelectionChanged>b__0(?)+() => { }
?, in void ActiveSelectionScope.Dispose()
?, in void SelectionHelper.ClearSelection()
?, in void RadCollectionView.Telerik.Maui.Controls.ICollectionView.ItemsChanged(NotifyCollectionChangedEventArgs e)
?, in void CollectionViewModel.OnDataProviderViewChanged(object sender, ViewChangedEventArgs e)
?, in void DataProviderBase.RaiseViewChanged(object sender, List<AddRemoveResult> changes, NotifyCollectionChangedEventArgs args, CollectionChange action, bool affectsAggregates)
?, in void LocalDataSourceProvider.ProcessCollectionChanged(NotifyCollectionChangedEventArgs e)
?, in void LocalDataSourceProvider.DataView_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
?, in void EnumerableDataSourceView.RaiseCollectionChanged(object sender, NotifyCollectionChangedEventArgs args)
?, in void EnumerableDataSourceView.ProcessCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
?, in void EnumerableDataSourceView.ProcessCollectionChangedOverride(object sender, NotifyCollectionChangedEventArgs args)
?, in void EnumerableDataSourceView.ProcessPendingCollectionChange()
?, in void DataProviderBase.RaiseViewChanging(object sender, IList changedItems, CollectionChange action)
?, in void LocalDataSourceProvider.DataView_CollectionChanging(object sender, NotifyCollectionChangedEventArgs e)
?, in void EnumerableDataSourceView.HandleCollectionChangedOverride(object sender, NotifyCollectionChangedEventArgs e)
?, in void EnumerableDataSourceView.Telerik.Maui.IWeakEventListener.ReceiveEvent(object sender, object args)
?, in void WeakEventHandlerList<NotifyCollectionChangedEventArgs>.ProcessEvent(object sender, object args)
?, in void WeakEventHandlerList<NotifyCollectionChangedEventArgs>.OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
?, in void ObservableCollection<ViewBundle>.OnCollectionChanged(NotifyCollectionChangedEventArgs)
?, in void ExtObservableCollection<ViewBundle>.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
?, in void ObservableCollection<ViewBundle>.OnCollectionReset()
?, in void ObservableCollection<ViewBundle>.ClearItems()
?, in void ExtObservableCollection<ViewBundle>.ClearItems()
?, in void Collection<ViewBundle>.Clear()
?, in void SearchViewViewModel.Dispose(bool disposing)
?, in void PropertyChangedNotifyingBase.Dispose()
?, in async void ViewBundle.Dispose(bool disposing)
?, in void <>c.<ThrowAsync>b__128_0(?)+(object state) => { }
?, in void NSAsyncSynchronizationContextDispatcher.Apply()
?, in void __Registrar_Callbacks__.callback_3311_Foundation_NSAsyncSynchronizationContextDispatcher_Apply(IntPtr pobj, IntPtr sel, IntPtr* exception_gchandle)
I have a user who reported a crash. In Sentry, I see this:
System.NullReferenceException: Object reference not set to an instance of an object.
?, in void TelerikLicense.ShowLicenseMessage(Page page)
?, in void TelerikLicense.VerifyLicense(Element element)+() => { }
?, in void TelerikLicense.ExecuteActionOnLoaded(Page page, Action action)
?, in void TelerikLicense.VerifyLicense(Element element)
?, in object <InitializeComponent>_anonXamlCDataTemplate_21.LoadDataTemplate()
?, in object ElementTemplate.CreateContent()
?, in void BindableLayoutController.CreateChildren()
?, in NotifyCollectionChangedAction NotifyCollectionChangedEventArgsExtensions.Apply(NotifyCollectionChangedEventArgs self, Action<object, int, bool> insert, Action<object, int> removeAt, Action reset)
?, in void BindableLayoutController.ItemsSourceCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
?, in void WeakNotifyCollectionChangedProxy.OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
File "ObservableCollection.cs", line 192, in void ObservableCollection<T>.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
handler(this, e);
?, in void ExtObservableCollection<T>.RaiseCollectionChanged()
the app was built with a successful license-check
Telerik.Licensing 1.6.6