Skip to content

Comments

[windows] Fixed Rapid change of selected tab results in crash.#33113

Merged
PureWeen merged 5 commits intodotnet:inflight/currentfrom
praveenkumarkarunanithi:Fix-32824
Dec 22, 2025
Merged

[windows] Fixed Rapid change of selected tab results in crash.#33113
PureWeen merged 5 commits intodotnet:inflight/currentfrom
praveenkumarkarunanithi:Fix-32824

Conversation

@praveenkumarkarunanithi
Copy link
Contributor

Root Cause

On Windows, TabbedPage uses WinUI Frame navigation to display each tab’s content. Each tab’s platform view (native UI element) is hosted inside a WinUI Page through a ContentPresenter.
During rapid tab switching, the platform view is reassigned to a new WinUI Page while still attached to the previous one. WinUI does not allow a UI element to exist in two visual trees simultaneously, which causes the crash.

Description of Change

Added a _displayedPage tracking field to maintain the correct displayed MAUI Page during navigation, allowing NavigateToPage to skip early if the requested page is already displayed and avoid redundant navigation. The method also now clears the previous WinUI Page’s ContentPresenter to explicitly detach the platform view and prevent the “element already has a parent” WinUI error. In UpdateCurrentPageContent, a skip guard avoids reassigning content that is already set, while _displayedPage is updated only after successful content assignment. Finally, OnHandlerDisconnected resets _displayedPage to null to ensure proper cleanup and prevent stale references.

Issues Fixed

Fixes #32824

Tested the behaviour in the following platforms

  • Android
  • Windows
  • iOS
  • Mac

Output Video

Before Issue Fix After Issue Fix
withoutfix withfix

@dotnet-policy-service dotnet-policy-service bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Dec 11, 2025
@sheiksyedm sheiksyedm marked this pull request as ready for review December 11, 2025 13:35
Copilot AI review requested due to automatic review settings December 11, 2025 13:35
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This pull request fixes a Windows-specific crash in TabbedPage when rapidly switching between tabs. The crash occurred because during rapid tab switches, platform views were being reassigned to new WinUI Pages while still attached to previous ones, violating WinUI's constraint that a UI element cannot exist in multiple visual trees simultaneously.

Key Changes

  • Added _displayedPage tracking field to prevent redundant navigation and track which MAUI Page is currently displayed
  • Added content detachment logic in NavigateToPage to explicitly clear the previous WinUI Page's ContentPresenter before navigation
  • Added guard condition in UpdateCurrentPageContent to skip updates when the requested page is already displayed

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
src/Controls/src/Core/TabbedPage/TabbedPage.Windows.cs Implements the fix by adding _displayedPage field, clearing old content before navigation, and adding guard conditions to prevent redundant updates
src/Controls/tests/DeviceTests/Elements/TabbedPage/TabbedPageTests.Windows.cs Adds regression test to verify old ContentPresenter content is cleared during tab switches

await CreateHandlerAndAddToWindow<TabbedViewHandler>(tabbedPage, handler =>
{
var frame = typeof(TabbedPage)
.GetField("_navigationFrame", BindingFlags.NonPublic | BindingFlags.Instance)
Copy link

Copilot AI Dec 11, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code uses BindingFlags but the required using directive for System.Reflection is missing from the file. This will cause a compilation error. Add 'using System.Reflection;' to the top of the file with the other using statements.

Copilot uses AI. Check for mistakes.
@jfversluis
Copy link
Member

/rebase

@jfversluis jfversluis added this to the .NET 10.0 SR3 milestone Dec 19, 2025
@PureWeen PureWeen changed the base branch from main to inflight/current December 22, 2025 17:29
@PureWeen PureWeen merged commit f54318f into dotnet:inflight/current Dec 22, 2025
137 of 161 checks passed
PureWeen pushed a commit that referenced this pull request Dec 22, 2025
### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes #32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
PureWeen pushed a commit that referenced this pull request Dec 26, 2025
### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes #32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
PureWeen pushed a commit that referenced this pull request Dec 30, 2025
### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes #32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
github-actions bot pushed a commit that referenced this pull request Dec 30, 2025
### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes #32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
PureWeen pushed a commit that referenced this pull request Jan 5, 2026
### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes #32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
@PureWeen PureWeen mentioned this pull request Jan 7, 2026
PureWeen pushed a commit that referenced this pull request Jan 9, 2026
### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes #32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
PureWeen pushed a commit that referenced this pull request Jan 9, 2026
### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes #32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
PureWeen pushed a commit that referenced this pull request Jan 9, 2026
### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes #32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
PureWeen pushed a commit that referenced this pull request Jan 13, 2026
### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes #32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
PureWeen pushed a commit that referenced this pull request Jan 13, 2026
### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes #32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
PureWeen added a commit that referenced this pull request Jan 13, 2026
## What's Coming

.NET MAUI inflight/candidate introduces significant improvements across
all platforms with focus on quality, performance, and developer
experience. This release includes 27 commits with various improvements,
bug fixes, and enhancements.

## CollectionView
- [iOS][CV2] Fix page can be dragged down, and it would cause an extra
space between Header and EmptyView text by @devanathan-vaithiyanathan in
#31840
  <details>
  <summary>🔧 Fixes</summary>

- [I8_Header_and_Footer_Null - The page can be dragged down, and it
would cause an extra space between Header and EmptyView
text.](#31465)
  </details>

- [iOS] Fixed the Items not displayed properly in CarouselView2 by
@Ahamed-Ali in #31336
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Items are not updated properly in
CarouselView2.](#31148)
  </details>

## Docs
- Improve Controls Core API docs by @jfversluis in
#33240

## Editor
- [iOS] Fixed an issue where an Editor with a small height inside a
ScrollView would cause the entire page to scroll by
@Tamilarasan-Paranthaman in #27948
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS][Editor] An Editor that has not enough height and resides inside
a ScrollView/CollectionView will scroll the entire
page](#27750)
  </details>

## Image
- [Android] Image control crashes on Android when image width exceeds
height by @KarthikRajaKalaimani in
#33045
  <details>
  <summary>🔧 Fixes</summary>

- [Image control crashes on Android when image width exceeds
height](#32869)
  </details>

## Mediapicker
- [Android 🤖] Add a log telling why the request is cancelled by @pictos
in #33295
  <details>
  <summary>🔧 Fixes</summary>

- [MediaPicker.PickPhotosAsync throwing TaskCancelledException in
net10-android](#33283)
  </details>

## Navigation
- [Android] Fix for App Hang When PopModalAsync Is Called Immediately
After PushModalAsync with Task.Yield() by @BagavathiPerumal in
#32479
  <details>
  <summary>🔧 Fixes</summary>

- [App hangs if PopModalAsync is called after PushModalAsync with single
await Task.Yield()](#32310)
  </details>

- [iOS 26] Navigation hangs after rapidly open and closing new page
using Navigation.PushAsync - fix by @kubaflo in
#32456
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] Navigation hangs after rapidly open and closing new page
using Navigation.PushAsync](#32425)
  </details>

## Pages
- [iOS] Fix ContentPage BackgroundImageSource not working by
@Shalini-Ashokan in #33297
  <details>
  <summary>🔧 Fixes</summary>

- [.Net MAUI- Page.BackgroundImageSource not working for
iOS](#21594)
  </details>

## RadioButton
- [Issue-Resolver] Fix #33264 - RadioButtonGroup not working with
Collection View by @kubaflo in #33343
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButtonGroup not working with
CollectionView](#33264)
  </details>

## SafeArea
- [Android] Fixed Label Overlapped by Android Status Bar When Using
SafeAreaEdges="Container" in .NET MAUI by @NirmalKumarYuvaraj in
#33285
  <details>
  <summary>🔧 Fixes</summary>

- [SafeAreaEdges works correctly only on the first tab in Shell. Other
tabs have content colliding with the display cutout in the landscape
mode.](#33034)
- [Label Overlapped by Android Status Bar When Using
SafeAreaEdges="Container" in .NET
MAUI](#32941)
- [[MAUI 10] Layout breaks on first navigation (Shell // route) until
soft keyboard appears/disappears (Android +
iOS)](#33038)
  </details>

## ScrollView
- [Windows, Android] Fix ScrollView Content Not Removed When Set to Null
by @devanathan-vaithiyanathan in
#33069
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows, Android] ScrollView Content Not Removed When Set to
Null](#33067)
  </details>

## Searchbar
- Fix Android crash when changing shared Drawable tint on Searchbar by
@tritter in #33071
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Crash on changing Tint of
Searchbar](#33070)
  </details>

## Shell
- [iOS] - Fix Custom FlyoutIcon from Being Overridden to Default Color
in Shell by @prakashKannanSf3972 in
#27580
  <details>
  <summary>🔧 Fixes</summary>

- [Change the flyout icon
color](#6738)
  </details>

- [iOS] Fix Shell NavBarIsVisible updates when switching ShellContent by
@Vignesh-SF3580 in #33195
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Shell NavBarIsVisible is not updated when changing
ShellContent](#33191)
  </details>

## Slider
- [C] Fix Slider and Stepper property order independence by
@StephaneDelcroix in #32939
  <details>
  <summary>🔧 Fixes</summary>

- [Slider Binding Initialization Order Causes Incorrect Value Assignment
in XAML](#32903)
- [Slider is very broken, Value is a mess when setting
Minimum](#14472)
- [Slider is buggy depending on order of
properties](#18910)
- [Stepper Value is incorrectly clamped to default min/max when using
bindableproperties in MVVM
pattern](#12243)
- [[Issue-Resolver] Fix #32903 - Sliderbinding initialization order
issue](#32907)
  </details>

## Stepper
- [Windows] Maui Stepper: Clamp minimum and maximum value by @OomJan in
#33275
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] Maui Stepper is not clamped to minimum or maximum
internally](#33274)
  </details>

- [iOS] Fixed the UIStepper Value from being clamped based on old higher
MinimumValue - Candidate PR test failure fix- 33363 by @Ahamed-Ali in
#33392

## TabbedPage
- [windows] Fixed Rapid change of selected tab results in crash. by
@praveenkumarkarunanithi in #33113
  <details>
  <summary>🔧 Fixes</summary>

- [Rapid change of selected tab results in crash on
Windows.](#32824)
  </details>

## Titlebar
- [Mac] Fix TitleBar Content Overlapping with Traffic Light Buttons on
Latest macOS Version by @devanathan-vaithiyanathan in
#33157
  <details>
  <summary>🔧 Fixes</summary>

- [TitleBar Content Overlapping with Traffic Light Buttons on Latest
macOS Version](#33136)
  </details>

## Xaml
- Fix for Control does not update from binding anymore after
MultiBinding.ConvertBack is called by @BagavathiPerumal in
#33128
  <details>
  <summary>🔧 Fixes</summary>

- [Control does not update from binding anymore after
MultiBinding.ConvertBack is
called](#24969)
- [The issue with the MultiBinding converter with two way binding mode
does not work properly when changing the
values.](#20382)
  </details>


<details>
<summary>🔧 Infrastructure (1)</summary>

- Avoid KVO on CALayer by introducing an Apple PlatformInterop by
@albyrock87 in #30861

</details>

<details>
<summary>🧪 Testing (2)</summary>

- [Testing] Enable UITest Issue18193 on MacCatalyst by @NafeelaNazhir in
#31653
  <details>
  <summary>🔧 Fixes</summary>

- [Test Issue18193 was disabled on Mac
Catalyst](#27206)
  </details>
- Set the CV2 handlers as the default by @Ahamed-Ali in
#33177

</details>

<details>
<summary>📦 Other (3)</summary>

- Update WindowsAppSDK to 1.8 by @mattleibow in
#32174
  <details>
  <summary>🔧 Fixes</summary>

- [Update to WindowsAppSDK](#30858)
  </details>
- Fix command dependency reentrancy by @simonrozsival in
#33129
- Fix SafeArea AdjustPan handling and add AdjustNothing mode tests by
@PureWeen via @Copilot in #33354

</details>
**Full Changelog**:
main...inflight/candidate
kubaflo pushed a commit to kubaflo/maui that referenced this pull request Jan 16, 2026
…t#33113)

### Root Cause
On Windows, `TabbedPage` uses WinUI `Frame` navigation to display each
tab’s content. Each tab’s platform view (native UI element) is hosted
inside a WinUI `Page` through a `ContentPresenter`.
During rapid tab switching, the platform view is reassigned to a new
WinUI `Page` while still attached to the previous one. WinUI does not
allow a UI element to exist in two visual trees simultaneously, which
causes the crash.
 
### Description of Change
Added a `_displayedPage` tracking field to maintain the correct
displayed MAUI Page during navigation, allowing `NavigateToPage` to skip
early if the requested page is already displayed and avoid redundant
navigation. The method also now clears the previous WinUI Page’s
`ContentPresenter` to explicitly detach the platform view and prevent
the “element already has a parent” WinUI error. In
`UpdateCurrentPageContent`, a skip guard avoids reassigning content that
is already set, while `_displayedPage` is updated only after successful
content assignment. Finally, OnHandlerDisconnected resets
`_displayedPage` to null to ensure proper cleanup and prevent stale
references.

### Issues Fixed
Fixes dotnet#32824 
 
Tested the behaviour in the following platforms
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac

### Output Video
| Before Issue Fix | After Issue Fix |
|------------------|-----------------|
| <img width="350" alt="withoutfix"
src="https://github.com/user-attachments/assets/4ae17a81-a399-4cd6-856d-ca4938cb683b"
/> | <img width="350" alt="withfix"
src="https://github.com/user-attachments/assets/5927a164-22d8-45bc-a910-003bfbc1927a"
/> |
@github-actions github-actions bot locked and limited conversation to collaborators Jan 22, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-controls-tabbedpage TabbedPage community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/windows

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Rapid change of selected tab results in crash on Windows.

4 participants