RadTabView WinUI: selected tab content is visible but native hit-test position remains on previous tab after repeated switching
Product: Telerik UI for .NET MAUI
Version: 15.0.0
Platform: Windows / WinUI
Target framework: net10.0-windows10.0.19041.0
Control: RadTabView
Description
We are experiencing a reproducible issue with RadTabView on Windows/WinUI where the selected tab content becomes visually out of sync with the native hit-test/layout position.
After switching between two tab contents several times, the newly selected tab appears on screen and is reported as selected/enabled, but pointer input is still received by the previously selected tab content.
This makes the visible tab appear disabled or noninteractive even though its controls and ancestors are enabled.
Minimal reproduction sequence
Using two tab contents, for example:
Expected result
The newly selected Expenses tab should be positioned in the active viewport and receive pointer input.
Actual result
On the failing second activation of Expenses:
RadTabView reports Expenses as selected.However, diagnostic inspection of the native layout shows that:
In other words, the visual selection and native hit-test/layout position diverge.
Additional observations
IsBusy=False.RadTabView content strip not synchronizing its layout/hit-test position with the selected tab.Diagnostic state comparison
| State | Current content | Result |
|---|---|---|
| A | Line Items – Item Code | Correct content receives input |
| B | Expenses – Expense Code | Correct content receives input |
| C | Line Items – Item Code again | Correct content receives input |
| D | Expenses selected again | Expenses visible, but pointer is received by Line Items |
At state D:
Question
Could you please confirm whether this is a known RadTabView issue on Windows/WinUI, particularly involving repeated selection causing the native content strip or hit-test geometry to become out of sync with the selected item?
If this is known, please advise:
We can provide a small standalone reproduction project and diagnostic logs if required.
Thank you.
I am reporting a button-sizing issue in Telerik UI for .NET MAUI RadCollectionView on iOS. A recycled item displays the correct button text but can retain the width allocated for the previous item’s longer text.
Environment
• Telerik UI for .NET MAUI 15.0.0; also reproduced with 14.1.0.
• .NET 10, Microsoft.Maui.Controls 10.0.80.
• Platform: iOS.
• No exception or error code accompanies the layout failure.
Reproduction sample: CollectionViewButtonSizingRepro.zip
The sample displays Telerik RadCollectionView and the built-in MAUI CollectionView side by side. Both use the same item template: Grid → Telerik RadButton, with no button width request. Each collection has independent data.
Telerik uses automatic item length ( ItemLength="-1" ); MAUI uses MeasureAllItems . There are no custom handlers, manual recycling, or layout workarounds.
Steps to reproduce
1. Launch the sample on iOS. All buttons initially display Download.
2. Tap several buttons in the Telerik pane. Their text changes to Downloaded, requiring a wider button.
3. Scroll those rows completely out of view and continue through untouched Download items. Try both continuous scrolling and scrolling with pauses.
4. Repeat independently in the MAUI pane.
Expected: After recycling, each button is sized for its current text and image.
Actual: In the Telerik pane, a Download button can retain the wider allocation from the previous Downloaded state, leaving incorrect spacing. The same template does not reproduce the issue in the MAUI CollectionView pane. Upgrading to Telerik 15.0.0 does not resolve it.
Earlier diagnostics in our original application showed correct fresh button measurement after rebinding, but a stale arranged width without a corrective child arrangement when the footer’s bounds remained unchanged.
Thanks,
Mingxiao Ye
Provide a Telerik MAUI RefreshView control.
This control should have integration at least with DataGrid and CollectionView. Now the Telerik CollectionView uses the MAUI RefreshView
Hi Team,
I would like to be able to have client-side filtering/sorting/grouping capabilities for large backend datasets that cannot be entirely loaded on the client.
As it stands now, the DataGrid (and other data components) can only operate on the data that is has in the local DataView. This means that I need to build a custom filtering solution that prefilters/presorts the backend data before paging and loading it into the DataGrid.
To accomplish the "full view", we need a data layer that understands both the UI as well as the backend. The Telerik UI for WPF product has an excellent solution for this, known as the WPF EntityFrameworkCoreDataSource - Overview - Telerik UI for WPF and the WPF DataServiceDataSource - Overview - Telerik UI for WPF.
If such a feature can be added to Telerik UI for MAUI, it would be an excellent bonus for the component suite in data heavy applications.
Thank you,
Peter
Clear icon is different between input controls and also margin and padding looks different.
Make sure the input controls share same look and feel across platforms.
Component: SignaturePad
Version: Telerik UI for .NET MAUI 12.0.0 .NET: .NET 10 / .NET MAUI
Platform: Reproduced on iOS (iPad, iPhone) and Android (Samsung). Cross-platform — bug is in the shared SingleTouchSegmentProvider, not in a platform-specific touch handler.
RadSignaturePad crashes the app with an unhandled InvalidOperationException: "Sequence contains no elements" thrown from the touch event pipeline. Because the exception originates inside the native→managed touch callback, it cannot be caught by user code and propagates to AppDomain.CurrentDomain.UnhandledException, terminating the app.
The root cause is a .Last() call on an empty segment collection inside SingleTouchSegmentProvider.OnTouch. The crash occurs in both TouchesMoved and TouchesEnded paths, indicating a missing guard at the central OnTouch entry point — not in a specific touch phase.
RadSignaturePad and a separate button that invokes signaturePad.ClearCommand.→ TouchesMoved fires after ClearCommand has emptied the internal segment collection. SingleTouchSegmentProvider.OnTouch calls .Last() on the empty collection and throws.
Reproduced on:
The same crash also occurs on TouchesEnded in less deterministic scenarios — palm rejection, multi-touch cancellation, Apple Pencil hover-to-touch transitions, or a touch that begins outside the view and ends inside it. All of these can deliver a touch event without a corresponding active segment. We've observed this variant in production on iPad but could not reliably reproduce it in isolation.
System.InvalidOperationException: Sequence contains no elements
at System.Linq.ThrowHelper.ThrowNoElementsException()
at System.Linq.Enumerable.Last[Segment](IEnumerable`1 source)
at Telerik.Maui.Controls.SignaturePad.SingleTouchSegmentProvider.OnTouch(InteractionAdapterEventArgs args)
at Telerik.Maui.Controls.SignaturePad.SegmentProvider.TouchRecognizer_Touch(Object sender, InteractionAdapterEventArgs args)
at Telerik.Maui.Controls.SignatureView.OnTouch(InteractionAdapterEventArgs args)
at Telerik.Maui.Controls.SignatureViewHandler.<ConnectHandler>b__3_0(InteractionAdapterEventArgs args)
at Telerik.Maui.Controls.SignaturePad.SignatureViewTouchHandler.FireEvent(InteractionAction actionType, UITouch touch)
at Telerik.Maui.Controls.SignaturePad.SignatureViewTouchHandler.TouchesMoved(NSSet touches, UIEvent evt)
at Telerik.Maui.Controls.SignaturePad.SignatureViewTouchHandler.__Registrar_Callbacks__.callback_1171_..._TouchesMoved(IntPtr pobj, IntPtr sel, IntPtr p0, IntPtr p1, IntPtr* exception_gchandle)
System.InvalidOperationException: Sequence contains no elements
at System.Linq.ThrowHelper.ThrowNoElementsException()
at System.Linq.Enumerable.Last[Segment](IEnumerable`1 source)
at Telerik.Maui.Controls.SignaturePad.SingleTouchSegmentProvider.OnTouch(InteractionAdapterEventArgs args)
at Telerik.Maui.Controls.SignaturePad.SegmentProvider.TouchRecognizer_Touch(Object sender, InteractionAdapterEventArgs args)
at Telerik.Maui.Controls.SignatureView.OnTouch(InteractionAdapterEventArgs args)
at Telerik.Maui.Controls.SignatureViewHandler.<ConnectHandler>b__3_0(InteractionAdapterEventArgs args)
at Telerik.Maui.Controls.SignaturePad.SignatureViewTouchHandler.FireEvent(InteractionAction actionType, UITouch touch)
at Telerik.Maui.Controls.SignaturePad.SignatureViewTouchHandler.TouchesEnded(NSSet touches, UIEvent evt)
at Telerik.Maui.Controls.SignaturePad.SignatureViewTouchHandler.__Registrar_Callbacks__.callback_1162_..._TouchesEnded(IntPtr pobj, IntPtr sel, IntPtr p0, IntPtr p1, IntPtr* exception_gchandle)
<telerik:RadSignaturePad
x:Name="signaturePad"
StrokeThickness="5"
StrokeColor="Black"
BackgroundColor="White" />
<Button Text="Clear" Clicked="OnClearClicked" />
void OnClearClicked(object s, EventArgs e)
{
if (signaturePad.ClearCommand.CanExecute(null))
signaturePad.ClearCommand.Execute(null);
}
No custom touch handlers, no SegmentProvider override, no gestures attached.
SingleTouchSegmentProvider.OnTouch should guard against an empty segment collection (e.g. .LastOrDefault() + null check, or an early return when no active segment exists). Touch events arriving after a Clear — or without a preceding TouchesBegan — should be ignored, not throw.
We disable the Clear button while a stroke is active (toggled in StrokeStarted / StrokeCompleted). This closes the deterministic repro but does not cover the non-deterministic TouchesEnded cases (palm rejection etc.), which still crash. A fix in SingleTouchSegmentProvider.OnTouch is required.
App crash on a customer-visible workflow (digital signature capture on service tickets). Affects production users on iPads, iPhones, and Android devices.
SignatureViewTouchHandler or SegmentProvider so we can guard OnTouch from user code?This is a request to have a Markdown Viewer added to Telerik UI for Maui's portfolio. Something similar to these:
We would only need the ability to view markdown. Not edit it.
Thank you,
Teddy
After upgrading from Telerik UI for .NET MAUI 13.0.0 → 13.2.0, a NullReferenceException is thrown inside SchedulerAgendaView.Init() on Windows (WinUI3) whenever a RadScheduler with an AgendaViewDefinition is used. The scheduler never renders and the app receives an unhandled exception.
Steps to Reproduce:
ContentPage (or any page) with a RadScheduler in XAML, including at least one AgendaViewDefinition in ViewDefinitions:<telerik:RadScheduler AppointmentsSource="{Binding Appointments}">
<telerik:RadScheduler.ViewDefinitions>
<telerik:AgendaViewDefinition />
<telerik:DayViewDefinition />
</telerik:RadScheduler.ViewDefinitions>
</telerik:RadScheduler>
Expected Behavior:
The scheduler renders correctly with the AgendaViewDefinition, as it did in 13.0.0.
Actual Behavior:
An unhandled NullReferenceException is thrown:
System.NullReferenceException: Object reference not set to an instance of an object.
at Telerik.Maui.Controls.Scheduler.SchedulerAgendaView.Init()
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__124_0(Object state)
at Microsoft.UI.Dispatching.DispatcherQueueSynchronizationContext.<>c__DisplayClass2_0.<Post>b__0()
Root Cause Analysis (via ILSpy decompilation):
Comparing the decompiled assemblies of 13.0.0 and 13.2.0 reveals a new override in RadScheduler introduced in 13.2.0:
// NEW in 13.2.0 — not present in 13.0.0:
protected override void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
base.OnPropertyChanged(propertyName);
if (propertyName == "Parent" && Parent != null && !IsLoaded)
UpdateActiveViewDefinition();
}
This causes the following call chain to be triggered during InitializeComponent() in the page constructor — before the page is attached to a window:
RadScheduler to the page → Parent property changesOnPropertyChanged("Parent") fires → UpdateActiveViewDefinition() is calledActiveViewDefinition = ViewDefinitions[0] (the AgendaViewDefinition)OnActiveViewDefinitionChanged() → content.Rebuild() (template already applied on WinUI3)SchedulerAgendaView.Model setter → Init() is called as async voidInit(), after the first await, the continuation runs and DataBindingComplete firescompleteHandler inside Init() calls:((BindableObject)this).Dispatcher.Dispatch(async delegate { ... });
Dispatcher is null because the SchedulerAgendaView is not yet attached to a window → NullReferenceExceptionThe exception is captured by the async void state machine and re-thrown via SynchronizationContext.ThrowAsync → DispatcherQueueSynchronizationContext.Post, which matches the observed stack trace exactly.
Why it worked in 13.0.0: UpdateActiveViewDefinition() was never called from OnPropertyChanged. It was only invoked after IsLoaded = true, at which point Dispatcher is guaranteed to be non-null.
Why the condition !IsLoaded is insufficient: Parent != null does not imply a window is present. During InitializeComponent(), the element has a parent in the logical tree but is not yet attached to any Window, making Dispatcher null on BindableObject.
Workaround:
Do not declare ViewDefinitions in XAML. Instead, add them programmatically in the page's Loaded event handler, at which point Dispatcher is guaranteed to be available:
private void OnPageLoaded(object sender, EventArgs e)
{
if (scheduler.ViewDefinitions.Count == 0)
{
scheduler.ViewDefinitions.Add(new AgendaViewDefinition());
scheduler.ViewDefinitions.Add(new DayViewDefinition());
scheduler.ViewDefinitions.Add(new WeekViewDefinition());
scheduler.ViewDefinitions.Add(new MonthViewDefinition());
}
}
Suggested Fix:
Either:
Option A — Guard Dispatcher usage inside SchedulerAgendaView.Init():
// In completeHandler, before calling Dispatch:
if (((BindableObject)this).Dispatcher is { } dispatcher)
dispatcher.Dispatch(...);
Option B — Guard UpdateActiveViewDefinition() in RadScheduler.OnPropertyChanged to only run when content (the internal RadSchedulerContent) has already been set (i.e., template was applied):
if (propertyName == "Parent" && Parent != null && !IsLoaded && content != null)
UpdateActiveViewDefinition();
Option B is more conservative and closer to the original 13.0.0 behavior, since content being non-null implies the template has been applied and Dispatcher is available.
Environment:
| Telerik UI for .NET MAUI | 13.2.0 (regression from 13.0.0) |
| .NET | .NET 10 |
| Platform | Windows (WinUI3) |
| MAUI | 10.0.60 |
Right to left flow direction completely breaks the RadDataGrid on Android and on iOS it doesn't seem to do anything.
Repro steps:
Android:
iOS:
If you test this on Windows, the FlowDirection is being appropriately applied.
Android LTR:
RTL:
when building an app without explicitly setting the target platform, the following error appears:
The type or namespace name 'Compatibility' does not exist in the namespace 'Telerik.Maui.Controls' (are you missing an assembly reference?)
The Telerik.Maui.Controls.Compatibility dll is missing from the .net9/10 shared folders
Hi,
Do you have on your roadmap to include a Shimmer View / Control as part of your .NET MAUI offerings to tidy up a screen loading indication.
From a UI/UX perspective, a shimmer sits better with our user community rather than a loading indicator.
Thank you,
Shane
It seems the issue happens randomly -> crashes on a Windows 19 Server while running a basic Windows Maui app.
There is a public bug report: https://github.com/mono/SkiaSharp/issues/3168
The Bottom Sheet component provides an intuitive way to display additional content to the users. It appears on the bottom of a screen as an overlay and presents users with a choice of actions that they must take.