Skip to content

[Windows] FlyoutPage: update CollapseStyle at runtime#29927

Merged
kubaflo merged 12 commits into
dotnet:inflight/currentfrom
devanathan-vaithiyanathan:fix-18200
Mar 30, 2026
Merged

[Windows] FlyoutPage: update CollapseStyle at runtime#29927
kubaflo merged 12 commits into
dotnet:inflight/currentfrom
devanathan-vaithiyanathan:fix-18200

Conversation

@devanathan-vaithiyanathan

@devanathan-vaithiyanathan devanathan-vaithiyanathan commented Jun 11, 2025

Copy link
Copy Markdown
Contributor

Note

Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!

Issue details

FlyoutPage on Windows did not update its layout when the CollapseStyle property changed at runtime.

Description of Change

This update enables dynamic support for the CollapseStyle property in FlyoutPage on Windows. It allows the flyout pane to update at runtime when the property changes,

Issues Fixed

Fixes #18200

Tested the behavior in the following platforms.

  • Windows
Before After
Windows
Without-Fix.mp4
Windows
With-Fix.mp4

@dotnet-policy-service dotnet-policy-service Bot added the community ✨ Community Contribution label Jun 11, 2025
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Hey there @@devanathan-vaithiyanathan! Thank you so much for your PR! Someone from the team will get assigned to your PR shortly and we'll get it reviewed.

@dotnet-policy-service dotnet-policy-service Bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Jun 11, 2025
@jsuarezruiz

Copy link
Copy Markdown
Contributor

/azp run MAUI-UITests-public

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@@ -0,0 +1,29 @@
# if TEST_FAILS_ON_ANDROID && TEST_FAILS_ON_CATALYST && TEST_FAILS_ON_IOS // It's a Windows specific API issue, so restricting the other platforms

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Because is a platform specific, here can use directly #if WINDOWS. Are not failing on other platforms, just have not sense.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

@jsuarezruiz , Thanks for pointing out. I have modified the changes

@devanathan-vaithiyanathan devanathan-vaithiyanathan marked this pull request as ready for review June 13, 2025 06:55
@devanathan-vaithiyanathan devanathan-vaithiyanathan requested a review from a team as a code owner June 13, 2025 06:55
Copilot AI review requested due to automatic review settings December 9, 2025 08:13
@github-actions

github-actions Bot commented Dec 9, 2025

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 29927

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 29927"

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

This PR fixes a Windows-specific issue where changing the CollapseStyle property on a FlyoutPage at runtime had no effect. The fix enables dynamic updates to the flyout pane's collapse behavior by adding a property changed callback and mapper implementation.

Key Changes

  • Added runtime support for CollapseStyle property changes in Windows FlyoutPage
  • Implemented property change notification system via OnCollapseStylePropertyChanged
  • Added Windows-specific mapper logic to translate CollapseStyle values to WinUI PaneDisplayMode

Reviewed changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 6 comments.

File Description
src/Controls/src/Core/PlatformConfiguration/WindowsSpecific/FlyoutPage.cs Added propertyChanged callback to CollapseStyleProperty to trigger handler updates when value changes at runtime
src/Controls/src/Core/FlyoutPage/FlyoutPage.Mapper.cs Added Windows-specific mapper for CollapseStyleProperty that sets WinUI NavigationView.PaneDisplayMode based on CollapseStyle value
src/Controls/tests/TestCases.HostApp/Issues/Issue18200.cs Created test page demonstrating dynamic CollapseStyle switching with button toggle functionality
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18200.cs Added UI test to verify flyout collapse behavior changes when CollapseStyle is toggled

@@ -0,0 +1,79 @@
using Microsoft.Maui.Controls.PlatformConfiguration;
using Microsoft.Maui.Controls.PlatformConfiguration.WindowsSpecific;

Copilot AI Dec 9, 2025

Copy link

Choose a reason for hiding this comment

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

There's an extra space in the using statement that creates inconsistent formatting with other using statements in the file.

Suggested change
using Microsoft.Maui.Controls.PlatformConfiguration.WindowsSpecific;
using Microsoft.Maui.Controls.PlatformConfiguration.WindowsSpecific;

Copilot uses AI. Check for mistakes.

namespace Maui.Controls.Sample.Issues;

[Issue(IssueTracker.Github, 18200, "Flyout Page SetCollapseStyle doesn't have any change", PlatformAffected.UWP)]

Copilot AI Dec 9, 2025

Copy link

Choose a reason for hiding this comment

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

The PlatformAffected.UWP value is outdated. MAUI uses Windows (WinUI3) instead of UWP (Universal Windows Platform). This should be PlatformAffected.Windows or simply PlatformAffected.All if testing on all platforms is acceptable.

Suggested change
[Issue(IssueTracker.Github, 18200, "Flyout Page SetCollapseStyle doesn't have any change", PlatformAffected.UWP)]
[Issue(IssueTracker.Github, 18200, "Flyout Page SetCollapseStyle doesn't have any change", PlatformAffected.Windows)]

Copilot uses AI. Check for mistakes.
Comment on lines +11 to +78
{
this.On<Microsoft.Maui.Controls.PlatformConfiguration.Windows>().SetCollapseStyle(CollapseStyle.Partial);

// Set the flyout page properties
FlyoutLayoutBehavior = FlyoutLayoutBehavior.Popover;

// Create the flyout content
var flyoutPage = new ContentPage
{
Title = "Master",
BackgroundColor = Colors.Blue
};

var page1Button = new Button
{
Text = "Page1",
AutomationId = "FlyoutItem",
HorizontalOptions = LayoutOptions.Start,
VerticalOptions = LayoutOptions.Center
};

flyoutPage.Content = new VerticalStackLayout
{
Children = { page1Button }
};

// Create the detail content
var detailPage = new ContentPage
{
Title = "Detail",
BackgroundColor = Colors.LightYellow
};

_button = new Button
{
Text = "Change Collapse Style",
AutomationId = "CollapseStyleButton",
};
_button.Clicked += OnCollapseStyleValueChanged;

detailPage.Content = new VerticalStackLayout
{
Children = {
new Microsoft.Maui.Controls.Label
{
Text = "Welcome to .NET MAUI!",
TextColor = Colors.Black,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center
},
_button
}
};

// Set the flyout and detail pages
Flyout = flyoutPage;
Detail = detailPage;
}

void OnCollapseStyleValueChanged(object sender, EventArgs e)
{
var currentCollapseStyle = this.On<Microsoft.Maui.Controls.PlatformConfiguration.Windows>().GetCollapseStyle();
var newCollapseStyle = currentCollapseStyle == CollapseStyle.Full
? CollapseStyle.Partial
: CollapseStyle.Full;

this.On<Microsoft.Maui.Controls.PlatformConfiguration.Windows>().SetCollapseStyle(newCollapseStyle);
}

Copilot AI Dec 9, 2025

Copy link

Choose a reason for hiding this comment

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

[nitpick] According to the MAUI coding guidelines, file indentation should use tabs, but this file uses spaces for indentation (4 spaces). While this might be consistent within the immediate context, the repository standard is to use tabs. Consider running dotnet format to ensure consistent formatting.

Suggested change
{
this.On<Microsoft.Maui.Controls.PlatformConfiguration.Windows>().SetCollapseStyle(CollapseStyle.Partial);
// Set the flyout page properties
FlyoutLayoutBehavior = FlyoutLayoutBehavior.Popover;
// Create the flyout content
var flyoutPage = new ContentPage
{
Title = "Master",
BackgroundColor = Colors.Blue
};
var page1Button = new Button
{
Text = "Page1",
AutomationId = "FlyoutItem",
HorizontalOptions = LayoutOptions.Start,
VerticalOptions = LayoutOptions.Center
};
flyoutPage.Content = new VerticalStackLayout
{
Children = { page1Button }
};
// Create the detail content
var detailPage = new ContentPage
{
Title = "Detail",
BackgroundColor = Colors.LightYellow
};
_button = new Button
{
Text = "Change Collapse Style",
AutomationId = "CollapseStyleButton",
};
_button.Clicked += OnCollapseStyleValueChanged;
detailPage.Content = new VerticalStackLayout
{
Children = {
new Microsoft.Maui.Controls.Label
{
Text = "Welcome to .NET MAUI!",
TextColor = Colors.Black,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center
},
_button
}
};
// Set the flyout and detail pages
Flyout = flyoutPage;
Detail = detailPage;
}
void OnCollapseStyleValueChanged(object sender, EventArgs e)
{
var currentCollapseStyle = this.On<Microsoft.Maui.Controls.PlatformConfiguration.Windows>().GetCollapseStyle();
var newCollapseStyle = currentCollapseStyle == CollapseStyle.Full
? CollapseStyle.Partial
: CollapseStyle.Full;
this.On<Microsoft.Maui.Controls.PlatformConfiguration.Windows>().SetCollapseStyle(newCollapseStyle);
}
{
this.On<Microsoft.Maui.Controls.PlatformConfiguration.Windows>().SetCollapseStyle(CollapseStyle.Partial);
// Set the flyout page properties
FlyoutLayoutBehavior = FlyoutLayoutBehavior.Popover;
// Create the flyout content
var flyoutPage = new ContentPage
{
Title = "Master",
BackgroundColor = Colors.Blue
};
var page1Button = new Button
{
Text = "Page1",
AutomationId = "FlyoutItem",
HorizontalOptions = LayoutOptions.Start,
VerticalOptions = LayoutOptions.Center
};
flyoutPage.Content = new VerticalStackLayout
{
Children = { page1Button }
};
// Create the detail content
var detailPage = new ContentPage
{
Title = "Detail",
BackgroundColor = Colors.LightYellow
};
_button = new Button
{
Text = "Change Collapse Style",
AutomationId = "CollapseStyleButton",
};
_button.Clicked += OnCollapseStyleValueChanged;
detailPage.Content = new VerticalStackLayout
{
Children = {
new Microsoft.Maui.Controls.Label
{
Text = "Welcome to .NET MAUI!",
TextColor = Colors.Black,
HorizontalOptions = LayoutOptions.Center,
VerticalOptions = LayoutOptions.Center
},
_button
}
};
// Set the flyout and detail pages
Flyout = flyoutPage;
Detail = detailPage;
}
void OnCollapseStyleValueChanged(object sender, EventArgs e)
{
var currentCollapseStyle = this.On<Microsoft.Maui.Controls.PlatformConfiguration.Windows>().GetCollapseStyle();
var newCollapseStyle = currentCollapseStyle == CollapseStyle.Full
? CollapseStyle.Partial
: CollapseStyle.Full;
this.On<Microsoft.Maui.Controls.PlatformConfiguration.Windows>().SetCollapseStyle(newCollapseStyle);
}

Copilot uses AI. Check for mistakes.
Comment on lines +41 to +55
var flyoutLayoutBehavior = (view as FlyoutPage)?.FlyoutLayoutBehavior;
if (view is BindableObject bindable && handler.PlatformView is Microsoft.Maui.Platform.RootNavigationView navigationView && flyoutLayoutBehavior is FlyoutLayoutBehavior.Popover)
{
var collapseStyle = PlatformConfiguration.WindowsSpecific.FlyoutPage.GetCollapseStyle(bindable);
switch (collapseStyle)
{
case PlatformConfiguration.WindowsSpecific.CollapseStyle.Partial:
navigationView.PaneDisplayMode = Microsoft.UI.Xaml.Controls.NavigationViewPaneDisplayMode.LeftCompact;
break;
case PlatformConfiguration.WindowsSpecific.CollapseStyle.Full:
default:
navigationView.PaneDisplayMode = Microsoft.UI.Xaml.Controls.NavigationViewPaneDisplayMode.LeftMinimal;
break;
}
}

Copilot AI Dec 9, 2025

Copy link

Choose a reason for hiding this comment

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

The pattern used here differs from the iOS platform-specific properties. Looking at the iOS PrefersHomeIndicatorAutoHiddenProperty and PrefersStatusBarHiddenProperty implementations in FlyoutPage.Mapper.cs, those mappers simply call handler.UpdateValue() to trigger the handler's mapper logic.

However, this implementation directly manipulates the PaneDisplayMode property inside MapCollapseStyle. While this works, it bypasses the normal mapper flow and could lead to inconsistencies if UpdatePaneDisplayModeFromFlyoutBehavior is called elsewhere (e.g., when FlyoutBehavior changes), which would reset PaneDisplayMode to LeftMinimal regardless of the CollapseStyle setting.

Consider integrating the CollapseStyle logic into UpdatePaneDisplayModeFromFlyoutBehavior in MauiNavigationView.cs so that it considers both FlyoutBehavior and CollapseStyle when determining the correct PaneDisplayMode. This would ensure the CollapseStyle is respected even when FlyoutBehavior changes at runtime.

Suggested change
var flyoutLayoutBehavior = (view as FlyoutPage)?.FlyoutLayoutBehavior;
if (view is BindableObject bindable && handler.PlatformView is Microsoft.Maui.Platform.RootNavigationView navigationView && flyoutLayoutBehavior is FlyoutLayoutBehavior.Popover)
{
var collapseStyle = PlatformConfiguration.WindowsSpecific.FlyoutPage.GetCollapseStyle(bindable);
switch (collapseStyle)
{
case PlatformConfiguration.WindowsSpecific.CollapseStyle.Partial:
navigationView.PaneDisplayMode = Microsoft.UI.Xaml.Controls.NavigationViewPaneDisplayMode.LeftCompact;
break;
case PlatformConfiguration.WindowsSpecific.CollapseStyle.Full:
default:
navigationView.PaneDisplayMode = Microsoft.UI.Xaml.Controls.NavigationViewPaneDisplayMode.LeftMinimal;
break;
}
}
handler.UpdateValue(nameof(IFlyoutView.FlyoutBehavior));

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,29 @@
# if WINDOWS // It's a Windows specific API issue, so restricting the other platforms

Copilot AI Dec 9, 2025

Copy link

Choose a reason for hiding this comment

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

According to the UI Testing Guidelines, platform-specific tests using #if directives should only be used when there's a specific technical limitation. The comment indicates this is a "Windows specific API issue", but CollapseStyle is designed to only affect Windows. Consider whether the test should still run on other platforms (where it would simply not test the CollapseStyle behavior) to ensure the FlyoutPage doesn't break on other platforms when the API is called. If this is truly Windows-only due to the API being Windows-specific by design (not a bug), the current approach is acceptable, but the comment should clarify this is by design, not a limitation.

Copilot generated this review using guidance from repository custom instructions.
Comment on lines +18 to +27
public void VerifyFlyoutCollapseStyleBehaviorChanges()
{
App.WaitForElement("CollapseStyleButton");
App.Tap("CollapseStyleButton");
App.TapFlyoutPageIcon();
App.TapFlyoutPageIcon(); // Close the flyout
App.WaitForNoElement("FlyoutItem");
App.Tap("CollapseStyleButton");
App.WaitForElement("FlyoutItem");
}

Copilot AI Dec 9, 2025

Copy link

Choose a reason for hiding this comment

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

The test logic has a potential issue: Line 24 waits for "FlyoutItem" to not be present after setting CollapseStyle to Full and tapping twice (open/close). However, in Full collapse mode with a Popover layout, the flyout should be minimally collapsed and still closeable. The test then expects "FlyoutItem" to be visible again after switching back to Partial at line 26, but this seems to test visibility rather than the collapse style behavior.

Consider enhancing the test to verify the actual visual behavior difference between Full and Partial collapse styles, not just whether items are visible after opening/closing. The current test might pass even if CollapseStyle changes aren't working correctly, as long as the flyout opens and closes.

Copilot generated this review using guidance from repository custom instructions.
@kubaflo

kubaflo commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

🤖 AI Summary

📊 Expand Full Reviewa1ad2f8 · condition compilation removed
🔍 Pre-Flight — Context & Validation

Issue: #18200 - Flyout Page SetCollapseStyle doesn't have any change
PR: #29927 - [Windows] Fix Flyout Page SetCollapseStyle doesn't have any change
Platforms Affected: Windows
Files Changed: 2 implementation, 2 test

Key Findings

  • The linked issue reports that WindowsSpecific.FlyoutPage.SetCollapseStyle(...) has no runtime effect on Windows MAUI, although the same API worked in Xamarin.Forms.
  • The PR updates the Windows platform configuration property to notify handlers on change and adds a Windows mapper to translate CollapseStyle into WinUI NavigationViewPaneDisplayMode.
  • Test coverage was added as a HostApp issue page plus a shared UI test, so the validation path is a Windows UI test (Issue18200).
  • Prior review feedback already questioned whether the mapper change stays consistent when flyout behavior updates later and whether the test truly proves the visual behavior difference between Full and Partial collapse styles.

Edge Cases / Discussion Notes

  • The issue thread includes a workaround that directly sets WinUI PaneDisplayMode through a mapper, which is conceptually close to the PR approach.
  • Inline review feedback raised a possible interaction where FlyoutBehavior updates could overwrite the collapse-style-specific PaneDisplayMode after the property changes.
  • The UI test is intentionally Windows-only because the API itself is Windows-specific.
  • No prior PRAgent review comment was found to resume from.

File Classification

  • Implementation: src/Controls/src/Core/FlyoutPage/FlyoutPage.Mapper.cs
  • Implementation: src/Controls/src/Core/PlatformConfiguration/WindowsSpecific/FlyoutPage.cs
  • Test (HostApp UI page): src/Controls/tests/TestCases.HostApp/Issues/Issue18200.cs
  • Test (Shared UITest): src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18200.cs
  • Test type: UI test via HostApp + Appium shared test

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #29927 Trigger handler updates when CollapseStyle changes, then map Windows CollapseStyle values to WinUI PaneDisplayMode at runtime PENDING (Gate) src/Controls/src/Core/FlyoutPage/FlyoutPage.Mapper.cs, src/Controls/src/Core/PlatformConfiguration/WindowsSpecific/FlyoutPage.cs, src/Controls/tests/TestCases.HostApp/Issues/Issue18200.cs, src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18200.cs Original PR

🚦 Gate — Test Verification

Result: PASSED

Gate Result: PASSED

Platform: windows
Mode: Full Verification

  • Tests FAIL without fix:
  • Tests PASS with fix:

Notes

  • Verification used Issue18200 on Windows.
  • Without the fix, the UI test timed out waiting for the flyout item state change, reproducing the bug.
  • With the fix applied, the same test passed, confirming the PR resolves the runtime collapse-style update issue.

🔧 Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix Route CollapseStyle through MauiNavigationView's flyout-behavior pipeline using a pane-display-mode override instead of mutating PaneDisplayMode directly in the mapper PASS 3 files Robust against later FlyoutBehavior updates overwriting the collapse style
2 try-fix Use a virtual flyout-pane-display-mode hook in MauiNavigationView/RootNavigationView so UpdatePaneDisplayModeFromFlyoutBehavior natively resolves compact vs minimal mode PASS 4 files Template-method style alternative that keeps collapse-style behavior inside the existing pipeline
3 try-fix Reuse existing PinPaneDisplayModeTo support on RootNavigationView, set it from the new CollapseStyle mapper, then re-run IFlyoutView.FlyoutBehavior mapping PASS 2 files Smallest passing alternative before cross-pollination; leans on existing navigation-view behavior
4 try-fix Use a Windows resource flag on the navigation view and let MauiNavigationView re-evaluate flyout behavior against that flag when CollapseStyle changes PASS 2 files Passes, but relies on a string-keyed resource flag and removes an existing flyout-behavior cache guard
5 try-fix Wrap the existing Windows FlyoutBehavior mapper with ModifyMapping, then apply CollapseStyle after the base mapper runs and re-trigger via UpdateValue(FlyoutBehavior) on property change PASS 2 files Simplest robust passing option; keeps the behavior in the existing mapper pipeline without adding native-view state
6 try-fix Let Windows native flyout behavior pull CollapseStyle directly from the virtual view via an internal interface and dual cache on behavior + collapse mode PASS 6 files Works, but materially broader than needed and introduces new cross-assembly coupling
7 try-fix Register a native PaneDisplayModeProperty callback to re-enforce the requested collapse style whenever internal/native logic overwrites it PASS 2 files Passed after retries, but callback enforcement and weak-table bookkeeping are more invasive than necessary
8 try-fix Register a shared MapPaneConfiguration mapper for both FlyoutLayoutBehavior and CollapseStyle and resolve the final native mode from combined state PASS 2 files Good unified-mapper variant, but less clearly aligned with the existing FlyoutBehavior update path than Candidate #5
PR PR #29927 Add a property-changed callback and map CollapseStyle directly to WinUI PaneDisplayMode in the Windows mapper PASSED (Gate) 4 files Original PR

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 2 Yes Make the existing Windows FlyoutBehavior mapping compute PaneDisplayMode from both current FlyoutBehavior and attached CollapseStyle. Tested as Candidate #5.
claude-sonnet-4.6 2 Yes Let native flyout behavior pull CollapseStyle from the virtual view as source-of-truth. Tested as Candidate #6.
gpt-5.3-codex 2 No NO NEW IDEAS
gemini-3-pro-preview 2 No NO NEW IDEAS
claude-opus-4.6 3 No NO NEW IDEAS
claude-sonnet-4.6 3 No NO NEW IDEAS
gpt-5.3-codex 3 No NO NEW IDEAS
gemini-3-pro-preview 3 Yes Re-enforce collapse style through a native PaneDisplayModeProperty callback. Tested as Candidate #7.
gpt-5.3-codex 4 Yes Use one shared mapper entrypoint for pane configuration across FlyoutLayoutBehavior and CollapseStyle. Tested as Candidate #8.

Exhausted: Yes
Selected Fix: Candidate #5 Simplest robust passing solution. It keeps collapse-style handling in the existing FlyoutBehavior mapper pipeline without introducing new native-view state, new interfaces, or callback enforcement.


📋 Report — Final Recommendation

Final Recommendation: REQUEST CHANGES

Final Recommendation: REQUEST CHANGES

Phase Status

Phase Status Notes
Pre-Flight COMPLETE Windows FlyoutPage runtime CollapseStyle update issue with UI coverage in Issue18200
Gate PASSED Windows full verification: test failed without fix and passed with fix
Try-Fix COMPLETE 8 attempts, 8 passing alternatives, Candidate #5 selected
Report COMPLETE

Summary

The PR fixes the reported Windows bug for the current UI test, so the submitted implementation is functionally valid. However, the try-fix phase found a better alternative: Candidate #5 keeps CollapseStyle handling inside the existing FlyoutBehavior mapping pipeline and achieves the same passing behavior with fewer moving parts and lower risk of future drift.

Root Cause

The Windows FlyoutPage stack already has a native FlyoutBehavior pipeline that determines PaneDisplayMode. The bug occurs because runtime CollapseStyle changes never trigger that pipeline, so Windows stays on the original pane mode. The PR addresses that by directly setting PaneDisplayMode from a separate mapper, but that approach bypasses the existing flow that also manages pane mode and can create a second source of truth.

Fix Quality

The PR's fix passes the new test, but it directly mutates native state from a dedicated CollapseStyle mapper instead of integrating with the existing FlyoutBehavior update path. Candidate #5 is stronger because it wraps the existing Windows FlyoutBehavior mapping with ModifyMapping, applies CollapseStyle after the base mapper runs, and reuses UpdateValue(nameof(IFlyoutView.FlyoutBehavior)) on property change. That keeps all pane-mode decisions in one mapper pipeline and avoids adding extra native-view state, interfaces, or callback enforcement.


📋 Expand PR Finalization Review

PR #29927 Finalization Review

Title & Description

Title: Needs improvement

  • Current: [Windows] Fix Flyout Page SetCollapseStyle doesn't have any change
  • Recommended: [Windows] FlyoutPage: update CollapseStyle at runtime

Assessment: The current title captures the issue but reads awkwardly and does not clearly describe the implemented behavior. The recommended title is more searchable and matches the actual fix.

Description: Good enough, but could be stronger

What works:

  • Includes the required NOTE block
  • Clearly states the Windows-specific runtime-update problem
  • Matches the main implementation at a high level
  • Includes the linked issue and tested platform

Suggested improvements:

  • Add the root cause: CollapseStyle changed the attached property value, but the handler was never notified, so RootNavigationView.PaneDisplayMode stayed stale.
  • Mention the actual implementation details: a property-changed callback was added on CollapseStyleProperty, and a Windows mapper now translates CollapseStyle to WinUI PaneDisplayMode.
  • Mention the added UI regression test for issue #18200.

Code Review Findings

Important issue

CollapseStyle can be overwritten by later FlyoutBehavior updates

  • Files: src/Controls/src/Core/FlyoutPage/FlyoutPage.Mapper.cs:39-56, src/Controls/src/Core/FlyoutPage/FlyoutPage.cs:328-359, src/Core/src/Platform/Windows/MauiNavigationView.cs:173-204
  • Problem: MapCollapseStyle sets RootNavigationView.PaneDisplayMode directly, but Windows FlyoutPage re-runs Handler.UpdateValue(nameof(FlyoutBehavior)) on size and display-orientation changes. That flows into UpdatePaneDisplayModeFromFlyoutBehavior(), which unconditionally resets FlyoutBehavior.Flyout to LeftMinimal, so a previously selected CollapseStyle.Partial can be lost after resize/orientation changes.
  • Why it matters: The PR fixes the immediate runtime toggle case, but the chosen pane mode is not sticky across later layout-driven updates.
  • Recommendation: Integrate CollapseStyle into the WinUI pane-mode calculation path, or pin the pane display mode instead of setting it once ad hoc, so later FlyoutBehavior remaps do not undo CollapseStyle.Partial.

Suggestion

The UI test does not cover the reset path above

  • Files: src/Controls/tests/TestCases.HostApp/Issues/Issue18200.cs, src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18200.cs
  • Observation: The added test verifies toggling CollapseStyle during a steady-state session, but it does not exercise the size/orientation path that triggers FlyoutBehavior remapping.
  • Recommendation: Extend the test coverage to validate that CollapseStyle.Partial remains effective after a window resize or orientation/display-info change.

Overall

The PR metadata mostly matches the implementation, but I would update the title for clarity. More importantly, I would not consider the implementation fully finalized until the Windows pane-mode reset issue is addressed or explicitly ruled out.

@MauiBot

MauiBot commented Mar 20, 2026

Copy link
Copy Markdown
Collaborator

🤖 AI Summary

📊 Expand Full Reviewa1ad2f8 · condition compilation removed
🔍 Pre-Flight — Context & Validation

Issue: #18200 - Flyout Page SetCollapseStyle doesn't have any change
PR: #29927 - [Windows] Fix Flyout Page SetCollapseStyle doesn't have any change
Platforms Affected: Windows
Files Changed: 2 implementation, 2 test

Key Findings

  • The linked issue reports that WindowsSpecific.FlyoutPage.SetCollapseStyle(...) has no runtime effect on Windows MAUI, although the same API worked in Xamarin.Forms.
  • The PR updates the Windows platform configuration property to notify handlers on change and adds a Windows mapper to translate CollapseStyle into WinUI NavigationViewPaneDisplayMode.
  • Test coverage was added as a HostApp issue page plus a shared UI test, so the validation path is a Windows UI test (Issue18200).
  • Prior review feedback already questioned whether the mapper change stays consistent when flyout behavior updates later and whether the test truly proves the visual behavior difference between Full and Partial collapse styles.

Edge Cases / Discussion Notes

  • The issue thread includes a workaround that directly sets WinUI PaneDisplayMode through a mapper, which is conceptually close to the PR approach.
  • Inline review feedback raised a possible interaction where FlyoutBehavior updates could overwrite the collapse-style-specific PaneDisplayMode after the property changes.
  • The UI test is intentionally Windows-only because the API itself is Windows-specific.
  • No prior PRAgent review comment was found to resume from.

File Classification

  • Implementation: src/Controls/src/Core/FlyoutPage/FlyoutPage.Mapper.cs
  • Implementation: src/Controls/src/Core/PlatformConfiguration/WindowsSpecific/FlyoutPage.cs
  • Test (HostApp UI page): src/Controls/tests/TestCases.HostApp/Issues/Issue18200.cs
  • Test (Shared UITest): src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18200.cs
  • Test type: UI test via HostApp + Appium shared test

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #29927 Trigger handler updates when CollapseStyle changes, then map Windows CollapseStyle values to WinUI PaneDisplayMode at runtime PENDING (Gate) src/Controls/src/Core/FlyoutPage/FlyoutPage.Mapper.cs, src/Controls/src/Core/PlatformConfiguration/WindowsSpecific/FlyoutPage.cs, src/Controls/tests/TestCases.HostApp/Issues/Issue18200.cs, src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18200.cs Original PR

Issue: #18200 - Flyout Page SetCollapseStyle doesn't have any effect
PR: #29927 - [Windows] FlyoutPage: update CollapseStyle at runtime
Platforms Affected: Windows
Files Changed: 2 implementation, 2 test

Key Findings

  • The linked issue reports that WindowsSpecific.FlyoutPage.SetCollapseStyle(...) does not update FlyoutPage layout at runtime on Windows, even though the API previously worked in Xamarin.Forms.
  • The PR adds a property-changed callback to CollapseStyleProperty and a Windows mapper that translates CollapseStyle into WinUI NavigationViewPaneDisplayMode.
  • Test coverage was added as a HostApp issue page plus a shared Appium UI test, so the validation path is a Windows UI test using Issue18200.
  • Prior discussion already raised two important concerns: later FlyoutBehavior remaps may overwrite the CollapseStyle-specific pane mode, and the new test only covers the immediate toggle path.

Edge Cases / Discussion Notes

  • The issue thread includes a workaround that directly set WinUI PaneDisplayMode from a mapper, which is conceptually similar to the PR approach.
  • Inline review feedback questioned whether resize/orientation-driven FlyoutBehavior updates can reset CollapseStyle.Partial after the property changes.
  • The added UI test is Windows-only because CollapseStyle is a Windows-specific API.
  • A prior PRAgent-style review exists on the PR thread, but this run is proceeding independently rather than resuming a partial local run.

File Classification

  • Implementation: src/Controls/src/Core/FlyoutPage/FlyoutPage.Mapper.cs
  • Implementation: src/Controls/src/Core/PlatformConfiguration/WindowsSpecific/FlyoutPage.cs
  • Test (HostApp UI page): src/Controls/tests/TestCases.HostApp/Issues/Issue18200.cs
  • Test (Shared UITest): src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18200.cs
  • Test type: UI test via HostApp + Appium shared test

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #29927 Add a property-changed callback for CollapseStyle, then map the Windows collapse style to WinUI PaneDisplayMode at runtime PENDING (Gate) src/Controls/src/Core/FlyoutPage/FlyoutPage.Mapper.cs, src/Controls/src/Core/PlatformConfiguration/WindowsSpecific/FlyoutPage.cs, src/Controls/tests/TestCases.HostApp/Issues/Issue18200.cs, src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18200.cs Original PR

🚦 Gate — Test Verification

Result: PASSED

Gate Result: PASSED

Platform: windows
Mode: Full Verification

  • Tests FAIL without fix:
  • Tests PASS with fix:

Notes

  • Verification used Issue18200 on Windows.
  • Without the fix, the UI test timed out waiting for the flyout item state change, reproducing the bug.
  • With the fix applied, the same test passed, confirming the PR resolves the runtime collapse-style update issue.

Result: PASSED

Gate Result: PASSED

Platform: windows
Mode: Full Verification

  • Tests FAIL without fix:
  • Tests PASS with fix:

Notes

  • Verification used Issue18200 on Windows.
  • Without the fix, the UI test timed out waiting for the expected element state change, reproducing the bug.
  • With the fix applied, the same test passed, confirming the PR resolves the immediate runtime collapse-style update issue.
  • Full verification report is available under CustomAgentLogsTmp/PRState/29927/PRAgent/gate/verify-tests-fail/verification-report.md.

🔧 Fix — Analysis & Comparison

Result: PASSED

Gate Result: PASSED

Platform: windows
Mode: Full Verification

  • Tests FAIL without fix:
  • Tests PASS with fix:

Notes

  • Verification used Issue18200 on Windows.
  • Without the fix, the UI test timed out waiting for the flyout item state change, reproducing the bug.
  • With the fix applied, the same test passed, confirming the PR resolves the runtime collapse-style update issue.

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix Integrate CollapseStyle into the existing flyout-behavior pane-mode pipeline via a generic override on MauiNavigationView, instead of a dedicated CollapseStyle mapper that writes PaneDisplayMode directly PASS 3 files Reuses the same update path that runs on size/orientation changes
2 try-fix Make MapFlyoutLayoutBehavior the single authoritative Controls-layer place that applies both flyout behavior and collapse style, and re-trigger it when CollapseStyle changes PASS 2 files Keeps all changes in Controls and reapplies after orientation-triggered behavior remaps
3 try-fix Append collapse-style handling onto the existing IFlyoutView.FlyoutBehavior mapping path, and re-trigger that path when CollapseStyle changes PASS 2 files Most directly aligns with the existing pane-mode update path
4 try-fix Modify mapping to run default flyout-behavior logic then apply a direct collapse-style override FAIL 1 file Did not reliably hide the flyout item in the test environment
5 try-fix Reset cached flyout-behavior tracking in MauiNavigationView, then re-run flyout-behavior mapping from a clean base before applying CollapseStyle PASS 3 files Explicit cache invalidation makes UpdateValue(FlyoutBehavior) effective again
6 try-fix Move both flyout behavior and collapse-style state into native MauiNavigationView dependency properties so one native method computes the final PaneDisplayMode PASS 4 files Robust single-source-of-truth design, but broader than necessary
PR PR #29927 Add a property-changed callback for CollapseStyle, then map the Windows collapse style to WinUI PaneDisplayMode at runtime PASSED (Gate) 4 files Original PR

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 1 Yes Candidate #1: move CollapseStyle through the flyout-behavior pipeline with a MauiNavigationView override instead of a side-channel mapper.
claude-sonnet-4.6 1 Yes Candidate #2: keep pane-mode logic entirely in MapFlyoutLayoutBehavior and re-run that mapping when CollapseStyle changes.
gpt-5.3-codex 1 Yes Candidate #3: compose collapse-style handling onto the existing IFlyoutView.FlyoutBehavior mapping and re-trigger that mapping on property change.
gemini-3-pro-preview 1 Yes Candidate #4: rerun the default flyout-behavior mapping and then apply a direct override.
claude-opus-4.6 2 No NO NEW IDEAS
claude-sonnet-4.6 2 Yes Candidate #5: reset cached flyout-behavior tracking before re-running flyout-behavior mapping from a clean base.
gpt-5.3-codex 2 No NO NEW IDEAS
gemini-3-pro-preview 2 Yes Candidate #6: use native state/binding-style aggregation in MauiNavigationView so one method computes the final pane mode.
claude-opus-4.6 3 No NO NEW IDEAS
claude-sonnet-4.6 3 No NO NEW IDEAS
gpt-5.3-codex 3 No NO NEW IDEAS
gemini-3-pro-preview 3 No NO NEW IDEAS

Exhausted: Yes
Selected Fix: Candidate #3 Simplest robust passing solution. It keeps CollapseStyle in the same IFlyoutView.FlyoutBehavior mapping path that already owns pane-mode updates, so later size/orientation remaps naturally preserve the requested collapse style without adding extra native state or broader plumbing.


📋 Report — Final Recommendation

Result: PASSED

Gate Result: PASSED

Platform: windows
Mode: Full Verification

  • Tests FAIL without fix:
  • Tests PASS with fix:

Notes

  • Verification used Issue18200 on Windows.
  • Without the fix, the UI test timed out waiting for the flyout item state change, reproducing the bug.
  • With the fix applied, the same test passed, confirming the PR resolves the runtime collapse-style update issue.

Final Recommendation: REQUEST CHANGES

Final Recommendation: REQUEST CHANGES

Phase Status

Phase Status Notes
Pre-Flight COMPLETE Windows FlyoutPage runtime CollapseStyle update issue with UI coverage in Issue18200
Gate PASSED Windows full verification: test failed without fix and passed with fix
Try-Fix COMPLETE 6 attempts tested, 5 passing alternatives plus the PR fix; Candidate #3 selected
Report COMPLETE

Summary

The PR's current implementation fixes the immediate Issue18200 runtime toggle scenario on Windows, and the new UI test correctly proves that. However, the try-fix phase found multiple simpler or better-aligned passing alternatives. The strongest option was Candidate #3, which keeps CollapseStyle in the same IFlyoutView.FlyoutBehavior mapping path that already governs pane-mode updates, instead of introducing a separate CollapseStyle mapper that writes native PaneDisplayMode directly.

Root Cause

Windows FlyoutPage already has an existing pipeline that recalculates PaneDisplayMode from FlyoutBehavior, including later re-evaluations caused by size or orientation changes. The bug exists because runtime CollapseStyle changes were not routed through that pipeline, so the requested compact/minimal state never got reflected. PR #29927 fixes the immediate symptom by adding a property-changed callback and directly mutating RootNavigationView.PaneDisplayMode, but that creates a second pane-mode decision path separate from the existing flyout-behavior flow.

Fix Quality

The submitted fix is functionally valid for the added regression test, but it bypasses the existing pane-mode update path and therefore is not the cleanest implementation. Candidate #3 achieved the same passing behavior with only two changed files by composing CollapseStyle into the existing IFlyoutView.FlyoutBehavior mapper path and re-triggering that path when the attached property changes. That keeps one authoritative pipeline for pane-mode decisions, aligns better with existing Windows FlyoutPage behavior, and avoids adding extra native state or a side-channel mapper.


📋 Expand PR Finalization Review

PR #29927 Finalization Review

Title & Description

Title: Needs improvement

  • Current: [Windows] Fix Flyout Page SetCollapseStyle doesn't have any change
  • Recommended: [Windows] FlyoutPage: update CollapseStyle at runtime

Assessment: The current title captures the issue but reads awkwardly and does not clearly describe the implemented behavior. The recommended title is more searchable and matches the actual fix.

Description: Good enough, but could be stronger

What works:

  • Includes the required NOTE block
  • Clearly states the Windows-specific runtime-update problem
  • Matches the main implementation at a high level
  • Includes the linked issue and tested platform

Suggested improvements:

  • Add the root cause: CollapseStyle changed the attached property value, but the handler was never notified, so RootNavigationView.PaneDisplayMode stayed stale.
  • Mention the actual implementation details: a property-changed callback was added on CollapseStyleProperty, and a Windows mapper now translates CollapseStyle to WinUI PaneDisplayMode.
  • Mention the added UI regression test for issue #18200.

Code Review Findings

Important issue

CollapseStyle can be overwritten by later FlyoutBehavior updates

  • Files: src/Controls/src/Core/FlyoutPage/FlyoutPage.Mapper.cs:39-56, src/Controls/src/Core/FlyoutPage/FlyoutPage.cs:328-359, src/Core/src/Platform/Windows/MauiNavigationView.cs:173-204
  • Problem: MapCollapseStyle sets RootNavigationView.PaneDisplayMode directly, but Windows FlyoutPage re-runs Handler.UpdateValue(nameof(FlyoutBehavior)) on size and display-orientation changes. That flows into UpdatePaneDisplayModeFromFlyoutBehavior(), which unconditionally resets FlyoutBehavior.Flyout to LeftMinimal, so a previously selected CollapseStyle.Partial can be lost after resize/orientation changes.
  • Why it matters: The PR fixes the immediate runtime toggle case, but the chosen pane mode is not sticky across later layout-driven updates.
  • Recommendation: Integrate CollapseStyle into the WinUI pane-mode calculation path, or pin the pane display mode instead of setting it once ad hoc, so later FlyoutBehavior remaps do not undo CollapseStyle.Partial.

Suggestion

The UI test does not cover the reset path above

  • Files: src/Controls/tests/TestCases.HostApp/Issues/Issue18200.cs, src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18200.cs
  • Observation: The added test verifies toggling CollapseStyle during a steady-state session, but it does not exercise the size/orientation path that triggers FlyoutBehavior remapping.
  • Recommendation: Extend the test coverage to validate that CollapseStyle.Partial remains effective after a window resize or orientation/display-info change.

Overall

The PR metadata mostly matches the implementation, but I would update the title for clarity. More importantly, I would not consider the implementation fully finalized until the Windows pane-mode reset issue is addressed or explicitly ruled out.

PureWeen pushed a commit that referenced this pull request Mar 23, 2026
#34575)

<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

## Description

Adds Windows platform support to the `maui-copilot` CI pipeline (AzDO
definition 27723), enabling Copilot PR reviews on Windows-targeted PRs.

### Changes

**`eng/pipelines/ci-copilot.yml`**
- Add `catalyst` and `windows` to Platform parameter values
- Add per-platform pool selection (`androidPool`, `iosPool`, `macPool`,
`windowsPool`)
- Skip Xcode, Android SDK, simulator setup for Windows/Catalyst
- Add Windows-specific "Set screen resolution" step (1920x1080)
- Add MacCatalyst-specific "Disable Notification Center" step
- Fix `sed` command for `Directory.Build.Override.props` on Windows (Git
Bash uses GNU sed)
- Handle Copilot CLI PATH detection on Windows vs Unix
- Change `script:` steps to `bash:` for cross-platform consistency

**`.github/scripts/Review-PR.ps1`**
- Add `catalyst` to ValidateSet for Platform parameter

**`.github/scripts/BuildAndRunHostApp.ps1`**
- Add Windows test assembly directory for artifact collection

**`.github/scripts/post-ai-summary-comment.ps1` /
`post-pr-finalize-comment.ps1`**
- Various improvements for cross-platform comment posting

### Validation

Successfully ran the pipeline with `Platform=windows` on multiple
Windows-specific PRs:
- PR #27713 — ✅ Succeeded
- PR #34337 — ✅ Succeeded
- PR #26217, #27609, #27880, #28617, #29927, #30068 — Triggered and
running

---------

Co-authored-by: Copilot <[email protected]>
@devanathan-vaithiyanathan

Copy link
Copy Markdown
Contributor Author

Could you please review the AI's suggestions?

@kubaflo , I have addressed the AI suggestion.

@MauiBot MauiBot added s/agent-review-incomplete and removed s/agent-changes-requested AI agent recommends changes - found a better alternative or issues labels Mar 24, 2026
@dotnet dotnet deleted a comment from MauiBot Mar 24, 2026
@MauiBot

MauiBot commented Mar 29, 2026

Copy link
Copy Markdown
Collaborator

🚦 Gate - Test Before and After Fix

📊 Expand Full Gate59cbf01 · addressed AI review summary

Gate Result: ✅ PASSED

Platform: WINDOWS · Base: main · Merge base: 720a9d4a

Test Without Fix (expect FAIL) With Fix (expect PASS)
🖥️ Issue18200 Issue18200 ✅ FAIL — 568s ✅ PASS — 464s
🔴 Without fix — 🖥️ Issue18200: FAIL ✅ · 568s
  Determining projects to restore...
  Restored D:\a\1\s\src\Graphics\src\Graphics.Win2D\Graphics.Win2D.csproj (in 21.93 sec).
  Restored D:\a\1\s\src\Graphics\src\Graphics\Graphics.csproj (in 21.93 sec).
  Restored D:\a\1\s\src\Essentials\src\Essentials.csproj (in 8.49 sec).
  Restored D:\a\1\s\src\Core\src\Core.csproj (in 16.79 sec).
  Restored D:\a\1\s\src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj (in 5.74 sec).
  Restored D:\a\1\s\src\Controls\src\Xaml\Controls.Xaml.csproj (in 30 ms).
  Restored D:\a\1\s\src\Controls\src\Core\Controls.Core.csproj (in 31 ms).
  Restored D:\a\1\s\src\Core\maps\src\Maps.csproj (in 14.52 sec).
  Restored D:\a\1\s\src\Controls\Maps\src\Controls.Maps.csproj (in 35 ms).
  Restored D:\a\1\s\src\Controls\Foldable\src\Controls.Foldable.csproj (in 17 ms).
  Restored D:\a\1\s\src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 23 ms).
  3 of 14 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Graphics.Win2D -> D:\a\1\s\artifacts\bin\Graphics.Win2D\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.Win2D.WinUI.Desktop.dll
  Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Maps -> D:\a\1\s\artifacts\bin\Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Maps.dll
  Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Controls.Foldable -> D:\a\1\s\artifacts\bin\Controls.Foldable\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Foldable.dll
  Microsoft.AspNetCore.Components.WebView.Maui -> D:\a\1\s\artifacts\bin\Microsoft.AspNetCore.Components.WebView.Maui\Debug\net10.0-windows10.0.19041.0\Microsoft.AspNetCore.Components.WebView.Maui.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Controls.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Maps.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Xaml.dll
  Controls.TestCases.HostApp -> D:\a\1\s\artifacts\bin\Controls.TestCases.HostApp\Debug\net10.0-windows10.0.19041.0\win-x64\Controls.TestCases.HostApp.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:05:47.01
  Determining projects to restore...
  Restored D:\a\1\s\src\Controls\tests\CustomAttributes\Controls.CustomAttributes.csproj (in 851 ms).
  Restored D:\a\1\s\src\TestUtils\src\VisualTestUtils\VisualTestUtils.csproj (in 3 ms).
  Restored D:\a\1\s\src\TestUtils\src\VisualTestUtils.MagickNet\VisualTestUtils.MagickNet.csproj (in 6.83 sec).
  Restored D:\a\1\s\src\Controls\tests\TestCases.WinUI.Tests\Controls.TestCases.WinUI.Tests.csproj (in 8.98 sec).
  Restored D:\a\1\s\src\TestUtils\src\UITest.Core\UITest.Core.csproj (in 1 ms).
  Restored D:\a\1\s\src\TestUtils\src\UITest.Appium\UITest.Appium.csproj (in 2 ms).
  Restored D:\a\1\s\src\TestUtils\src\UITest.NUnit\UITest.NUnit.csproj (in 1.62 sec).
  Restored D:\a\1\s\src\TestUtils\src\UITest.Analyzers\UITest.Analyzers.csproj (in 5.55 sec).
  7 of 15 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0\Microsoft.Maui.Graphics.dll
  Controls.CustomAttributes -> D:\a\1\s\artifacts\bin\Controls.CustomAttributes\Debug\net10.0\Controls.CustomAttributes.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0\Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0\Microsoft.Maui.dll
  Controls.Core.Design -> D:\a\1\s\artifacts\bin\Controls.Core.Design\Debug\net472\Microsoft.Maui.Controls.DesignTools.dll
  Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0\Microsoft.Maui.Controls.dll
  UITest.Core -> D:\a\1\s\artifacts\bin\UITest.Core\Debug\net10.0\UITest.Core.dll
  VisualTestUtils -> D:\a\1\s\artifacts\bin\VisualTestUtils\Debug\netstandard2.0\VisualTestUtils.dll
  UITest.Appium -> D:\a\1\s\artifacts\bin\UITest.Appium\Debug\net10.0\UITest.Appium.dll
  UITest.NUnit -> D:\a\1\s\artifacts\bin\UITest.NUnit\Debug\net10.0\UITest.NUnit.dll
  VisualTestUtils.MagickNet -> D:\a\1\s\artifacts\bin\VisualTestUtils.MagickNet\Debug\netstandard2.0\VisualTestUtils.MagickNet.dll
  UITest.Analyzers -> D:\a\1\s\artifacts\bin\UITest.Analyzers\Debug\netstandard2.0\UITest.Analyzers.dll
  Controls.TestCases.WinUI.Tests -> D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
Test run for D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
   NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 3/29/2026 7:35:01 PM FixtureSetup for Issue18200(Windows)
>>>>> 3/29/2026 7:35:09 PM VerifyFlyoutCollapseStyleBehaviorChanges Start
>>>>> 3/29/2026 7:35:29 PM VerifyFlyoutCollapseStyleBehaviorChanges Stop
>>>>> 3/29/2026 7:35:29 PM Log types: 
  Failed VerifyFlyoutCollapseStyleBehaviorChanges [20 s]
  Error Message:
   System.TimeoutException : Timed out waiting for element...
  Stack Trace:
     at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
   at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
   at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
   at Microsoft.Maui.TestCases.Tests.Issues.Issue18200.VerifyFlyoutCollapseStyleBehaviorChanges() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18200.cs:line 26
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

NUnit Adapter 4.5.0.0: Test execution complete
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.10]   Discovering: Controls.TestCases.WinUI.Tests
[xUnit.net 00:00:00.29]   Discovered:  Controls.TestCases.WinUI.Tests

Total tests: 1
     Failed: 1
Test Run Failed.
 Total time: 48.9120 Seconds

🟢 With fix — 🖥️ Issue18200: PASS ✅ · 464s
  Determining projects to restore...
  All projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Graphics.Win2D -> D:\a\1\s\artifacts\bin\Graphics.Win2D\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.Win2D.WinUI.Desktop.dll
  Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.dll
  Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Maps -> D:\a\1\s\artifacts\bin\Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Maps.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Controls.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Maps.dll
  Microsoft.AspNetCore.Components.WebView.Maui -> D:\a\1\s\artifacts\bin\Microsoft.AspNetCore.Components.WebView.Maui\Debug\net10.0-windows10.0.19041.0\Microsoft.AspNetCore.Components.WebView.Maui.dll
  Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Xaml.dll
  Controls.Foldable -> D:\a\1\s\artifacts\bin\Controls.Foldable\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Foldable.dll
  Controls.TestCases.HostApp -> D:\a\1\s\artifacts\bin\Controls.TestCases.HostApp\Debug\net10.0-windows10.0.19041.0\win-x64\Controls.TestCases.HostApp.dll

Build succeeded.
    0 Warning(s)
    0 Error(s)

Time Elapsed 00:05:32.51
  Determining projects to restore...
  All projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0\Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0\Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0\Microsoft.Maui.dll
  Controls.CustomAttributes -> D:\a\1\s\artifacts\bin\Controls.CustomAttributes\Debug\net10.0\Controls.CustomAttributes.dll
  Controls.Core.Design -> D:\a\1\s\artifacts\bin\Controls.Core.Design\Debug\net472\Microsoft.Maui.Controls.DesignTools.dll
  Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13684000
  Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0\Microsoft.Maui.Controls.dll
  UITest.Core -> D:\a\1\s\artifacts\bin\UITest.Core\Debug\net10.0\UITest.Core.dll
  UITest.NUnit -> D:\a\1\s\artifacts\bin\UITest.NUnit\Debug\net10.0\UITest.NUnit.dll
  VisualTestUtils -> D:\a\1\s\artifacts\bin\VisualTestUtils\Debug\netstandard2.0\VisualTestUtils.dll
  VisualTestUtils.MagickNet -> D:\a\1\s\artifacts\bin\VisualTestUtils.MagickNet\Debug\netstandard2.0\VisualTestUtils.MagickNet.dll
  UITest.Appium -> D:\a\1\s\artifacts\bin\UITest.Appium\Debug\net10.0\UITest.Appium.dll
  UITest.Analyzers -> D:\a\1\s\artifacts\bin\UITest.Analyzers\Debug\netstandard2.0\UITest.Analyzers.dll
  Controls.TestCases.WinUI.Tests -> D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
Test run for D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll (.NETCoreApp,Version=v10.0)
VSTest version 18.0.1 (x64)

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
   NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 3/29/2026 7:43:02 PM FixtureSetup for Issue18200(Windows)
>>>>> 3/29/2026 7:43:10 PM VerifyFlyoutCollapseStyleBehaviorChanges Start
>>>>> 3/29/2026 7:43:14 PM VerifyFlyoutCollapseStyleBehaviorChanges Stop
  Passed VerifyFlyoutCollapseStyleBehaviorChanges [4 s]
NUnit Adapter 4.5.0.0: Test execution complete
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.10]   Discovering: Controls.TestCases.WinUI.Tests
[xUnit.net 00:00:00.36]   Discovered:  Controls.TestCases.WinUI.Tests

Test Run Successful.
Total tests: 1
     Passed: 1
 Total time: 27.5190 Seconds

📁 Fix files reverted (4 files)
  • eng/pipelines/ci-copilot.yml
  • src/Controls/src/Core/FlyoutPage/FlyoutPage.Mapper.cs
  • src/Controls/src/Core/PlatformConfiguration/WindowsSpecific/FlyoutPage.cs
  • src/Core/src/Platform/Windows/MauiNavigationView.cs

@MauiBot

MauiBot commented Mar 29, 2026

Copy link
Copy Markdown
Collaborator

🤖 AI Summary

📊 Expand Full Review59cbf01 · addressed AI review summary
🔍 Pre-Flight — Context & Validation

Issue: #18200 - Flyout Page SetCollapseStyle doesn't have any change
PR: #29927 - [Windows] FlyoutPage: update CollapseStyle at runtime
Platforms Affected: Windows only (Windows-specific API)
Files Changed: 3 implementation, 2 test

Key Findings

  • Root Cause: CollapseStyleProperty in WindowsSpecific/FlyoutPage.cs had no propertyChanged callback, so runtime changes had no effect — the handler was never notified to update the UI.
  • Fix Strategy: Three-part fix:
    1. Add propertyChanged: OnCollapseStylePropertyChanged to CollapseStyleProperty + handler that calls flyoutPage.Handler.UpdateValue(nameof(CollapseStyleProperty))
    2. Register MapCollapseStyle mapper in FlyoutPage.Mapper.cs (Windows only) that sets FlyoutPaneDisplayMode on RootNavigationView
    3. Add FlyoutPaneDisplayMode property to MauiNavigationView.cs so that UpdatePaneDisplayModeFromFlyoutBehavior respects the collapse style when FlyoutBehavior re-evaluates
  • Gate: ✅ PASSED on Windows
  • Open review comments:
    • Extra space in using statement (cosmetic — using Microsoft.Maui.Controls...)
    • PlatformAffected.UWP should be PlatformAffected.Windows
    • Mixed tabs/spaces indentation in Issue18200.cs
    • Copilot reviewer noted test logic tests open/close visibility rather than pane display mode directly (but this is a reasonable proxy for the behavior)
  • Prior agent reviews: PR has labels s/agent-reviewed, s/agent-review-incomplete, s/agent-gate-passed, s/agent-fix-win

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #29927 Add propertyChanged callback + FlyoutPaneDisplayMode property + mapper registration ✅ PASSED (Gate) WindowsSpecific/FlyoutPage.cs, FlyoutPage.Mapper.cs, MauiNavigationView.cs Original PR

🔧 Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix (claude-opus-4.6) propertyChanged calls handler.UpdateValue("FlyoutBehavior"); replaced FlyoutBehavior mapper on Windows to apply CollapseStyle override after base call PASS 2 files (WindowsSpecific/FlyoutPage.cs, FlyoutPage.Mapper.cs) Simpler no new state on MauiNavigationView
2 try-fix (claude-sonnet-4.6) propertyChanged directly calls
avView.UpdateFlyoutPaneDisplayMode(mode); added method + property to MauiNavigationView PASS 2 files (WindowsSpecific/FlyoutPage.cs, MauiNavigationView.cs) No mapper changes needed
3 try-fix (gpt-5.3-codex) Hooked FlyoutPage.PropertyChanged (not CollapseStyleProperty metadata) to trigger UpdateValue(FlyoutBehavior) FAIL 1 file (FlyoutPage.cs) Attached property changes not surfaced through PropertyChanged override
4 try-fix (gpt-5.4) propertyChanged calls handler.UpdateValue(FlyoutLayoutBehavior); modified MapFlyoutLayoutBehavior on Windows to also apply CollapseStyle override PASS 3 files Bundles CollapseStyle into FlyoutLayoutBehavior mapper path
PR PR #29927 propertyChanged -> handler.UpdateValue(nameof(CollapseStyleProperty)) -> new MapCollapseStyle mapper sets FlyoutPaneDisplayMode + PaneDisplayMode; property on MauiNavigationView ensures robustness through re-evaluations PASSED (Gate) 3 files Dedicated mapper; minor code quality issues

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 2 No All approaches are detect-change + update-PaneDisplayMode. Space exhausted.

Exhausted: Yes
Selected Fix: PR #29927 Dedicated mapper approach is architecturally cleanest, consistent with iOS platform-specific pattern. FlyoutPaneDisplayMode property ensures robustness. Gate PASSED. Minor code quality issues to address.


📋 Report — Final Recommendation

✅ Final Recommendation: APPROVE

Phase Status

Phase Status Notes
Pre-Flight ✅ COMPLETE Issue #18200, Windows-only, 3 impl + 2 test files
Gate ✅ PASSED Windows platform
Try-Fix ✅ COMPLETE 4 attempts: 3 passing, 1 failing; cross-pollination exhausted
Report ✅ COMPLETE

Summary

PR #29927 fixes a long-standing issue where FlyoutPage.SetCollapseStyle() on Windows had no runtime effect. The fix is correct, well-structured, and the gate test passes. Three independent alternative approaches were found during Try-Fix, confirming the fix space is well-understood. The PR's chosen architecture is the most maintainable. Minor code quality issues should be addressed before merge.

Root Cause

CollapseStyleProperty in WindowsSpecific/FlyoutPage.cs was declared without a propertyChanged callback. As an attached BindableProperty, runtime value changes generated no notifications — neither the handler nor the platform view was ever told to update. The UpdatePaneDisplayModeFromFlyoutBehavior path in MauiNavigationView always defaulted to LeftMinimal, ignoring any previously-set CollapseStyle.

Fix Quality

The PR's three-part fix is architecturally sound:

  1. propertyChanged callback on CollapseStyleProperty — minimal, correct hook; calls handler.UpdateValue(nameof(CollapseStyleProperty)) to route through the mapper system (consistent with how iOS platform-specific properties work in the same file).

  2. MapCollapseStyle mapper registered in FlyoutPage.Mapper.cs — dedicated mapper for CollapseStyle (clean separation of concerns, consistent with iOS MapPrefersHomeIndicatorAutoHiddenProperty pattern). Sets FlyoutPaneDisplayMode on RootNavigationView to persist the desired mode.

  3. FlyoutPaneDisplayMode property on MauiNavigationView — ensures CollapseStyle survives layout-driven FlyoutBehavior re-evaluations (e.g., resize/orientation). UpdatePaneDisplayModeFromFlyoutBehavior now reads this property so CollapseStyle.Partial (LeftCompact) persists even when FlyoutBehavior is re-mapped.

Simpler alternatives existed (Try-Fix Attempt 1: 2 files, no new state) but the PR's approach is more correct: dedicated mapper for each concern, FlyoutPaneDisplayMode stored explicitly on the platform view.

Issues to Address Before Merge

These should be fixed but do not require a different fix approach:

  1. PlatformAffected.UWPPlatformAffected.Windows in Issue18200.cs line 6 — UWP is the wrong enum value for WinUI3/MAUI Windows apps.

  2. Extra space in using statement in Issue18200.cs line 2: using Microsoft.Maui.Controls.PlatformConfiguration.WindowsSpecific; has a double space.

  3. Mixed indentation in Issue18200.cs — file uses spaces in some places, tabs in others. Run dotnet format to normalize.

  4. Test validation strength — the test verifies flyout item visibility (Partial = visible strip, Full = hidden) which is a valid proxy for pane display mode. Acceptable given the Windows NavigationView behavior.


@MauiBot MauiBot added s/agent-approved AI agent recommends approval - PR fix is correct and optimal s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates and removed s/agent-review-incomplete s/agent-fix-win AI found a better alternative fix than the PR labels Mar 29, 2026
@kubaflo kubaflo changed the base branch from main to inflight/current March 30, 2026 10:37
@kubaflo kubaflo merged commit 381fb58 into dotnet:inflight/current Mar 30, 2026
30 of 31 checks passed
PureWeen pushed a commit that referenced this pull request Apr 8, 2026
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Issue details
FlyoutPage on Windows did not update its layout when the CollapseStyle
property changed at runtime.


### Description of Change

<!-- Enter description of the fix in this section -->
This update enables dynamic support for the CollapseStyle property in
FlyoutPage on Windows. It allows the flyout pane to update at runtime
when the property changes,


### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes #18200 

<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->

**Tested the behavior in the following platforms.**
- [x] Windows


| Before  | After  |
|---------|--------|
| **Windows**<br> <video
src="https://github.com/user-attachments/assets/9d7844d7-af65-465a-abb3-b611290afe1f"
width="400" height="250"> |**Windows**<br> <video
src="https://github.com/user-attachments/assets/2edd0934-c369-4dda-8269-e22291769c2e"
width="400" height="250"> |
devanathan-vaithiyanathan added a commit to devanathan-vaithiyanathan/maui that referenced this pull request Apr 9, 2026
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Issue details
FlyoutPage on Windows did not update its layout when the CollapseStyle
property changed at runtime.


### Description of Change

<!-- Enter description of the fix in this section -->
This update enables dynamic support for the CollapseStyle property in
FlyoutPage on Windows. It allows the flyout pane to update at runtime
when the property changes,


### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes dotnet#18200 

<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->

**Tested the behavior in the following platforms.**
- [x] Windows


| Before  | After  |
|---------|--------|
| **Windows**<br> <video
src="https://github.com/user-attachments/assets/9d7844d7-af65-465a-abb3-b611290afe1f"
width="400" height="250"> |**Windows**<br> <video
src="https://github.com/user-attachments/assets/2edd0934-c369-4dda-8269-e22291769c2e"
width="400" height="250"> |
PureWeen pushed a commit that referenced this pull request Apr 14, 2026
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Issue details
FlyoutPage on Windows did not update its layout when the CollapseStyle
property changed at runtime.


### Description of Change

<!-- Enter description of the fix in this section -->
This update enables dynamic support for the CollapseStyle property in
FlyoutPage on Windows. It allows the flyout pane to update at runtime
when the property changes,


### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes #18200 

<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->

**Tested the behavior in the following platforms.**
- [x] Windows


| Before  | After  |
|---------|--------|
| **Windows**<br> <video
src="https://github.com/user-attachments/assets/9d7844d7-af65-465a-abb3-b611290afe1f"
width="400" height="250"> |**Windows**<br> <video
src="https://github.com/user-attachments/assets/2edd0934-c369-4dda-8269-e22291769c2e"
width="400" height="250"> |
@PureWeen PureWeen mentioned this pull request Apr 14, 2026
devanathan-vaithiyanathan added a commit to Tamilarasan-Paranthaman/maui that referenced this pull request Apr 21, 2026
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Issue details
FlyoutPage on Windows did not update its layout when the CollapseStyle
property changed at runtime.


### Description of Change

<!-- Enter description of the fix in this section -->
This update enables dynamic support for the CollapseStyle property in
FlyoutPage on Windows. It allows the flyout pane to update at runtime
when the property changes,


### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes dotnet#18200 

<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->

**Tested the behavior in the following platforms.**
- [x] Windows


| Before  | After  |
|---------|--------|
| **Windows**<br> <video
src="https://github.com/user-attachments/assets/9d7844d7-af65-465a-abb3-b611290afe1f"
width="400" height="250"> |**Windows**<br> <video
src="https://github.com/user-attachments/assets/2edd0934-c369-4dda-8269-e22291769c2e"
width="400" height="250"> |
Ahamed-Ali pushed a commit that referenced this pull request Apr 22, 2026
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Issue details
FlyoutPage on Windows did not update its layout when the CollapseStyle
property changed at runtime.


### Description of Change

<!-- Enter description of the fix in this section -->
This update enables dynamic support for the CollapseStyle property in
FlyoutPage on Windows. It allows the flyout pane to update at runtime
when the property changes,


### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes #18200 

<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->

**Tested the behavior in the following platforms.**
- [x] Windows


| Before  | After  |
|---------|--------|
| **Windows**<br> <video
src="https://github.com/user-attachments/assets/9d7844d7-af65-465a-abb3-b611290afe1f"
width="400" height="250"> |**Windows**<br> <video
src="https://github.com/user-attachments/assets/2edd0934-c369-4dda-8269-e22291769c2e"
width="400" height="250"> |
PureWeen pushed a commit that referenced this pull request Apr 22, 2026
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Issue details
FlyoutPage on Windows did not update its layout when the CollapseStyle
property changed at runtime.


### Description of Change

<!-- Enter description of the fix in this section -->
This update enables dynamic support for the CollapseStyle property in
FlyoutPage on Windows. It allows the flyout pane to update at runtime
when the property changes,


### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes #18200 

<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->

**Tested the behavior in the following platforms.**
- [x] Windows


| Before  | After  |
|---------|--------|
| **Windows**<br> <video
src="https://github.com/user-attachments/assets/9d7844d7-af65-465a-abb3-b611290afe1f"
width="400" height="250"> |**Windows**<br> <video
src="https://github.com/user-attachments/assets/2edd0934-c369-4dda-8269-e22291769c2e"
width="400" height="250"> |
PureWeen pushed a commit that referenced this pull request Apr 28, 2026
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!

<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

### Issue details
FlyoutPage on Windows did not update its layout when the CollapseStyle
property changed at runtime.


### Description of Change

<!-- Enter description of the fix in this section -->
This update enables dynamic support for the CollapseStyle property in
FlyoutPage on Windows. It allows the flyout pane to update at runtime
when the property changes,


### Issues Fixed

<!-- Please make sure that there is a bug logged for the issue being
fixed. The bug should describe the problem and how to reproduce it. -->

Fixes #18200 

<!--
Are you targeting main? All PRs should target the main branch unless
otherwise noted.
-->

**Tested the behavior in the following platforms.**
- [x] Windows


| Before  | After  |
|---------|--------|
| **Windows**<br> <video
src="https://github.com/user-attachments/assets/9d7844d7-af65-465a-abb3-b611290afe1f"
width="400" height="250"> |**Windows**<br> <video
src="https://github.com/user-attachments/assets/2edd0934-c369-4dda-8269-e22291769c2e"
width="400" height="250"> |
PureWeen added a commit that referenced this pull request Apr 29, 2026
## Blazor
- Fix: Filter precompressed RCL assets from MAUI Blazor Hybrid APKs by
@mattleibow in #33917
  <details>
  <summary>🔧 Fixes</summary>

- [.NET MAUI Blazor Hybrid App should not precompress
assets](#33773)
  </details>

- [Windows] Fix for Runtime error when closing external window with WPF
Webview Control by @BagavathiPerumal in
#34006
  <details>
  <summary>🔧 Fixes</summary>

- [Runtime error when closing external window with WPF Webview
Control](#32944)
  </details>

## Button
- [Android] ImageButton CornerRadius not being applied - fix by @kubaflo
in #30074
  <details>
  <summary>🔧 Fixes</summary>

- [ImageButton CornerRadius not being applied on
Android](#23854)
  </details>

- Fix Disabled visual state ignored when Button has locally-set
BackgroundColor/TextColor by @Dhivya-SF4094 in
#34444
  <details>
  <summary>🔧 Fixes</summary>

- [[regression/9.0] VisualState "Disabled" is not properly applied for
Button with custom
appearance](#34363)
  </details>

## CollectionView
- Fix CollectionView grid spacing updates for first row and column by
@KarthikRajaKalaimani in #34527
  <details>
  <summary>🔧 Fixes</summary>

- [[MAUI] I2_Vertical grid for horizontal Item Spacing and Vertical Item
Spacing - horizontally updating the spacing only applies to the second
column](#34257)
  </details>

- Fix CollectionView record struct selection on Windows by
@jeremy-visionaid in #33488

- [Android] Ensure disconnected ItemsViewHandler doesn't hold onto the
items source by @filipnavara in
#24610
  <details>
  <summary>🔧 Fixes</summary>

- [Crash on NullReferenceException with measurement cells in
CollectionView](#24304)
  </details>

- [Windows] Fixed VisualState Setters not working properly for
CollectionView by @Dhivya-SF4094 in
#27230
  <details>
  <summary>🔧 Fixes</summary>

- [VisualState Setters not working properly on Windows for a
CollectionView](#27086)
- [[regression/8.0.3] [Windows][CollectionView]Label Disappear when set
Style in
ContentPage.Resources](#19209)
- [[Windows] Label style defined as ContentPage Resource doesn't
propagate to
CollectionView](#18701)
  </details>

- [Windows] Fixed Margin doesn't work inside CollectionView EmptyView by
@Dhivya-SF4094 in #29897
  <details>
  <summary>🔧 Fixes</summary>

- [Margin doesn't work inside CollectionView
EmptyView](#8494)
  </details>

- [Android, Windows] Fix CarouselView PreviousPosition/PreviousItem
incorrect during animated ScrollTo() by @praveenkumarkarunanithi in
#34570
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] CurrentItemChangedEventArgs.PreviousItem and
PositionChangedEventArgs.PreviousPosition Not Updating Correctly When
Using ScrollTo or Setting
Position](#29544)
  </details>

- [iOS] CarouselView2: Update internal scroll indicators for
compositional layout by @SubhikshaSf4851 in
#33639
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Horizontal Scroll Bar Not Visible on CarouselView
(CV2)](#29390)
  </details>

- [CarouselViewHandler2] Fir fox CurrentItem does not work when
ItemSpacing is set by @SyedAbdulAzeemSF4852 in
#32135
  <details>
  <summary>🔧 Fixes</summary>

- [[CarouselViewHandler2] CurrentItem does not work when ItemSpacing is
set](#32048)
  </details>

- [iOS] Fix for Incorrect Scroll in Loop Mode When CurrentItem Is Not
Found in ItemsSource by @SyedAbdulAzeemSF4852 in
#32141
  <details>
  <summary>🔧 Fixes</summary>

- [[Android & iOS] Setting an invalid CurrentItem causes scroll to last
item in looped
CarouselView](#32139)
  </details>

- [Android] IndicatorView: Add TalkBack accessibility descriptions for
indicators by @praveenkumarkarunanithi in
#31775
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] IndicatorView does not convey correct accessibility
information](#31446)
  </details>

- [iOS, macOS] Fixed CollectionView KeepLastItemInView Not Updating
Correctly When Items Are Added Dynamically by @NanthiniMahalingam in
#32191
  <details>
  <summary>🔧 Fixes</summary>

- [[.NET10] I9 - Scroll_Position - "KeepLastItemInView" does not keep
the last item at the end of the displayed list when adding new
items.](#31825)
  </details>

- [Windows, Android] Resolved issue with dynamic Header/Footer
reassignment in CollectionView. by @prakashKannanSf3972 in
#28403
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows, Android] Toggling Header/Footer in CollectionView
Dynamically is not working](#27959)
- [CollectionView HeaderTemplate and FooterTemplate are not displayed
when ItemsSource is initially set to
null](#28337)
- [[Android] Header and Footer Not Visible in CollectionView When
EmptyView is Selected
First](#28351)
  </details>

- [Android] Fix CollectionView inside disabled RefreshView blocks scroll
by @Vignesh-SF3580 in #34702
  <details>
  <summary>🔧 Fixes</summary>

- [C6-The C6 page cannot scroll on Windows and Android
platforms.](#34666)
  </details>

- [Android] CollectionView: Fix SelectedItem visual state not applying
when re-selecting same item by @KarthikRajaKalaimani in
#31591
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView - SelectedItem visual state manager not
working](#20062)
  </details>

- [Windows] Fixed CollectionView.EmptyView can not be removed by setting
it to Null by @Dhivya-SF4094 in
#29487
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] CollectionView.EmptyView can not be removed by setting it
to Null](#18657)
- [[Windows] EmptyViewTemplate Not Working in
CarouselView](#29463)
- [EmptyViewTemplate does not do
anything](#18551)
- [[MAUI] I5_EmptyView - The data template selector cannot display the
correct string.](#23330)
  </details>

- [iOS] Support for IsSwipeEnabled on CarouselView2 by @kubaflo in
#29996
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] IsSwipeEnabled Not Working on CarouselView
(CV2)](#29391)
  </details>

- [iOS, MacOS] Fixed FlowDirection not working on Header/Footer in
CollectionView by @Dhivya-SF4094 in
#32775
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, MacOS] FlowDirection not working on Header/Footer in
CollectionView](#32771)
  </details>

- [iOS] CollectionView: Fix drag-and-drop reordering into empty groups
by @SuthiYuvaraj in #34151
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView Drag and Drop Reordering Can't Drop in Empty
Group](#12008)
  </details>

- [Android] CollectionView: Fix drag-and-drop reordering into empty
groups by @SuthiYuvaraj in #31867
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView Drag and Drop Reordering Can't Drop in Empty
Group](#12008)
  </details>

- [iOS] Fix vertical CarouselView MandatorySingle snapping on iOS by
@Vignesh-SF3580 in #34700
  <details>
  <summary>🔧 Fixes</summary>

- [CarouselView vertical snap points ignored on iOS with
Microsoft.Maui.Controls v10.0.20 (regression from
v9.0.120)](#33308)
  </details>

- [iOS26] Fix CarouselView scrolling to wrong item when navigating to
last item by @Vignesh-SF3580 in
#34013
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] CarouselView does not scroll to the correct last
item](#33770)
  </details>

- Fixed the OnPlatform does not work for header property in Collection
view by @NanthiniMahalingam in #28935
  <details>
  <summary>🔧 Fixes</summary>

- [OnPlatform does not work in Header of
CollectionView](#25124)
  </details>

- [Android] [Candidate branch] Fix
VerifySelectedItemClearsOnNullAssignment,
CollectionViewSelectionShouldClear, SelectedItemVisualIsCleared UI test
failure on Android by @KarthikRajaKalaimani in
#34928

## DateTimePicker
- [iOS] Fix for DatePicker FlowDirection Not Working on iOS by
@SyedAbdulAzeemSF4852 in #30193
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] DatePicker FlowDirection Not Working on
iOS](#30065)
  </details>

## Drawing
- [Shapes] Line: Fix asymmetric Stretch.None path translation when
right/bottom edge overflows by @NirmalKumarYuvaraj in
#34385
  <details>
  <summary>🔧 Fixes</summary>

- [Line coordinates not computed
correctly](#11404)
- [Lines not drawing
correctly](#26961)
  </details>

- [Android] Fixed GraphicsView drawable is visible outside the canvas by
@NirmalKumarYuvaraj in #28353
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] GraphicsView, The drawn image can also be visible outside
the canvas](#20834)
  </details>

- Fixed Custom Drawable does not support binding by @NirmalKumarYuvaraj
in #29442
  <details>
  <summary>🔧 Fixes</summary>

- [Custom IDrawable control does not databind to a model property when
used inside a CollectionView
ItemTemplate](#20991)
  </details>

- Added a support for GradientBrushes on Shape.Stroke by @kubaflo in
#22208
  <details>
  <summary>🔧 Fixes</summary>

- [GradientBrushes are not supported on
Shape.Stroke](#21983)
  </details>

## Editor
- Fixed Editor HorizontalTextAlignment does not update at run time by
@NirmalKumarYuvaraj in #25129
  <details>
  <summary>🔧 Fixes</summary>

- [Editor HorizontalTextAlignment Does not
Works.](#10987)
- [[iOS/MacOs] Right-To-Left (RTL) alignment is not applied to Editor
placeholder](#30052)
  </details>

- [Windows] Fixed Entry Editor placeholder Text CharacterSpacing by
@SubhikshaSf4851 in #30324
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] CharacterSpacing not applied to Placeholder text in Entry
and Editor controls](#30071)
  </details>

## Entry
- [Windows] Fix fo setting an Entry's Keyboard to Date causes it to be
interpreted as a password input by @SyedAbdulAzeemSF4852 in
#29344
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] Entry Keyboad-Type "Date" results in
Password-Entry](#28975)
  </details>

- [Android] Exception thrown when give more than 5000 characters to the
Text property of Entry. by @KarthikRajaKalaimani in
#30242
  <details>
  <summary>🔧 Fixes</summary>

- [Android crash when Entry has >5000
characters](#30144)
  </details>

## Essentials
- Bump MonoApiToolsMSBuildTasksPackageVersion to 0.5.0 and ship
Essentials.AI public APIs by @mattleibow via @Copilot in
#34574

- [Mac] DeviceDisplay.KeepScreenOn not being respected on Mac OS by
@HarishwaranVijayakumar in #32708
  <details>
  <summary>🔧 Fixes</summary>

- [[Mac Catalyst] DeviceDisplay.KeepScreenOn not being respected on Mac
OS](#26059)
  </details>

## Flyoutpage
- [Windows] FlyoutPage: update CollapseStyle at runtime by
@devanathan-vaithiyanathan in #29927
  <details>
  <summary>🔧 Fixes</summary>

- [Flyout Page SetCollapseStyle doesn't have any
change](#18200)
  </details>

## Gestures
- [Android] Fix for TapGestureRecognizer doesn't fire by
@HarishwaranVijayakumar in #34497
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] TapGestureRecognizer doesn't
fire](#5825)
  </details>

## Image
- [Android] Fix Share.RequestAsync SecurityException on Android 10+
caused by missing ClipData by @HarishwaranVijayakumar in
#34417
  <details>
  <summary>🔧 Fixes</summary>

- [[Bug] Share.RequestAsync throws java.lang.SecurityException
(uid=1000) on Android 10+ due to missing
intent.ClipData](#34370)
  </details>

- [Windows]Fixed the MauiImage with logical name containing path issue
by @sheiksyedm in #32864
  <details>
  <summary>🔧 Fixes</summary>

- [MauiImage with LogicalName containing path - is not working on
Windows](#32356)
  </details>

- [Android, Windows & iOS] Fix Downsize/ScaleImage to maintain aspect
ratio and prevent upscaling by @SyedAbdulAzeemSF4852 in
#30808
  <details>
  <summary>🔧 Fixes</summary>

- [[Android & Windows] In GraphicsView, the aspect ratio is not
maintained when Downsize is called with both maxWidth and
maxHeight](#30803)
  </details>

## Label
- [iOS , macOS] Fixed Label text cropping when a width request is
specified on the label inside a VerticalStackLayout with specified width
request by @NanthiniMahalingam in
#29166
  <details>
  <summary>🔧 Fixes</summary>

- [Label text gets cropped when a width request is specified on the
label inside a
VerticalStackLayout](#28660)
- [[iOS] Label with a fixed WidthRequest has wrong
height](#26644)
  </details>

- [Android] Fix Label word wrapping clips text depending on alignment
and layout options by @Dhivya-SF4094 in
#34533
  <details>
  <summary>🔧 Fixes</summary>

- [Bug: Android Label word wrapping clips text depending on alignment
and layout options](#34459)
  </details>

- LineHeight and decorations for HTML Label - fix by @kubaflo in
#31202
  <details>
  <summary>🔧 Fixes</summary>

- [LineHeight with HTML Label not
working](#22193)
  - [lineheight is broken ](#22197)
  </details>

- [iOS] Fix Label with TailTruncation not rendering after
empty-to-non-empty text transition by @kubaflo in
#34812
  <details>
  <summary>🔧 Fixes</summary>

- [Label with LineBreakMode="TailTruncation" does not render text if
initial Text is null or empty on first render
(iOS)](#34591)
  </details>

## Layout
- [Android] Fix overflowing children clipped when parent Opacity < 1 by
@SyedAbdulAzeemSF4852 in #34565
  <details>
  <summary>🔧 Fixes</summary>

- [Maui Android parent view inappropriately creates clipping mask when
its opacity is less than 1, cropping out
children](#22038)
  </details>

- Fixed the FlexLayout reverse issue with the AlignContent by
@Ahamed-Ali in #32134
  <details>
  <summary>🔧 Fixes</summary>

- [FlexLayout alignment issue when Wrap is set to Reverse and
AlignContent is set to SpaceAround, SpaceBetween or
SpaceEvenly](#31565)
  </details>

- [iOS/Mac] Fixed BoxView in AbsoluteLayout did not return to its
default AutoSize for Height and Width after reset by @Dhivya-SF4094 in
#31648
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Catalyst] BoxView in AbsoluteLayout does not return to default
AutoSize for Height/Width after
reset](#31496)
  </details>

## Map
- [Windows] Implement WinUI 3 MapControl handler using Azure Maps by
@jfversluis in #34138

## Modal
- [Android] PopToRootAsync for modal pages - improvements by @kubaflo in
#26851
  <details>
  <summary>🔧 Fixes</summary>

- [Shell PopToRootAsync doesn't happen instantly - previous pages flash
quickly. Only happens in NET
9](#26846)
  </details>

- [Android] Fix HideSoftInputOnTapped doesn't work on Modal Pages by
@HarishwaranVijayakumar in #34770
  <details>
  <summary>🔧 Fixes</summary>

- [HideSoftInputOnTapped doesn't work on Modal
Pages](#34730)
  </details>

## Navigation
- [iOS] Alert popup may be displayed on wrong window when modal page
navigation is in progress - fix by @kubaflo in
#31016
  <details>
  <summary>🔧 Fixes</summary>

- [Alert popup may be displayed on wrong window when modal page
navigation is in progress on
iOS/MacOS](#30970)
  </details>

- [Android] Page: Fix OnNavigatedTo called twice when NavigationPage is
FlyoutPage Detail by @KarthikRajaKalaimani in
#31931
  <details>
  <summary>🔧 Fixes</summary>

- [NavigationPage and FlyoutPage both call OnNavigatedTo, so it is
called twice](#23902)
  </details>

## Picker
- Fixed the Picker didn't dismiss it when tapping outside on iOS and
MacCatalyst platform. by @KarthikRajaKalaimani in
#30067
  <details>
  <summary>🔧 Fixes</summary>

- [[regression/8.0.3] iOS Picker dismiss does not work when clicking
outside of the Picker](#19168)
  </details>

- [Windows] Fixed Picker items width wont resize back by
@SubhikshaSf4851 in #33042
  <details>
  <summary>🔧 Fixes</summary>

- [Picker items width won't resize back when its container window gets
resized down.](#32984)
  </details>

## RadioButton
- Fix TalkBack not correctly narrating RadioButtons with Content by
@SubhikshaSf4851 in #34521
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] TalkBack does not correctly narrate RadioButtons with
Content](#34322)
  </details>

## SafeArea
- [Android] Fix SafeAreaShouldWorkOnAllShellTabs test failure on API 36
by @praveenkumarkarunanithi in #34239

## ScrollView
- [iOS] Preserve ScrollView offsets when Orientation changes to Neither
by @Vignesh-SF3580 in #34672
  <details>
  <summary>🔧 Fixes</summary>

- [Incorrect implementation of
ScrollView.Orientation](#34583)
  </details>

## Searchbar
- [Android] Fix SearchBar text bleeding between instances after
navigation by @SyedAbdulAzeemSF4852 in
#34703
  <details>
  <summary>🔧 Fixes</summary>

- [MAUI Android: SearchBar copies content from one to the
other](#20348)
  </details>

- Fixed SearchBar CursorPosition and SelectionLength not updating when
typing by @Dhivya-SF4094 in #34347
  <details>
  <summary>🔧 Fixes</summary>

- [SearchBar - CursorPosition and SelectionLength are not updated when
the user types](#30779)
  </details>

## SearchBar
- [Windows] Fixed SearchHandler issues by @Tamilarasan-Paranthaman in
#29520
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] SearchHandler APIs are not functioning
properly](#29493)
  </details>

## Shell
- [iOS, Mac] Fix for Background set to Transparent doesn't have the same
behavior as BackgroundColor Transparent by @HarishwaranVijayakumar in
#32245
  <details>
  <summary>🔧 Fixes</summary>

- [Background set to Transparent doesn't have the same behavior as
BackgroundColor =
Transparent](#22769)
  </details>

- [iOS] Fix App crash with NullReferenceException in
ShellSectionRenderer by @devanathan-vaithiyanathan in
#32109
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] App crash with NullReferenceException in
ShellSectionRenderer](#31961)
  </details>

- [Android] Fixed back button icon selection logic in
ShellToolbarTracker by @kubaflo in
#32080
  <details>
  <summary>🔧 Fixes</summary>

- [IconOverride in Shell.BackButtonBehavior does not
work.](#32050)
  </details>

- Fix TabBarIsVisible Not Updating Dynamically When Set on ShellContent
by @Vignesh-SF3580 in #33090
  <details>
  <summary>🔧 Fixes</summary>

- [Shell.TabBarIsVisible is not updated dynamically at
runtime](#32994)
  </details>

- [iOS, macOS] Shell: Fix RTL flow direction for flyout, menu cells, tab
bar, and Locked flyout position by @NanthiniMahalingam in
#32701
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Mac Catalyst] Shell Flyout and Content Do Not Fully Support
RightToLeft (RTL)](#32419)
  </details>

- [IOS] Inconsistent Resize Behavior for Header/Footer - fix by @kubaflo
in #28713
  <details>
  <summary>🔧 Fixes</summary>

- [[IOS, Mac] Inconsistent Resize Behavior for
Header/Footer](#26397)
- [Enable Shell Flyout Header/Footer resize tests on
iOS/Catalyst](#33501)
  </details>

- [Android] Fix for SearchHandler retaining previous page SearchView
data in pages within Shell sections by @BagavathiPerumal in
#29545
  <details>
  <summary>🔧 Fixes</summary>

- [[Shell][Android] The truth is out there...but not on top tab search
handlers](#8716)
  </details>

- [Android] Fix empty space above TabBar after navigating back when
TabBar visibility is toggled by @praveenkumarkarunanithi in
#34324
  <details>
  <summary>🔧 Fixes</summary>

- [Empty space appears above TabBar after navigating back when TabBar
visibility is toggled](#33703)
- [Grid with SafeAreaEdges=Container has incorrect size when tab bar
appears](#34256)
  </details>

## SwipeView
- [Android] SwipeView: Use MeasureSpecMode.Exactly for SwipeItem layout
to fix text visibility by @Ahamed-Ali in
#27399
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Right SwipeView items are not visible in the
SwipeView.](#27367)
  </details>

- [Android] Prevent the tap that closes an open SwipeView from being
propagated to children by @sjordanGSS in
#24275
  <details>
  <summary>🔧 Fixes</summary>

- [Tapping to close a SwipeView will activate TapGestureRecognizers on
.Content](#23921)
  </details>

## Switch
- [iOS & Mac] Fix for SearchHandler retains previous page state when
switching top tabs by @BagavathiPerumal in
#34735
  <details>
  <summary>🔧 Fixes</summary>

- [[Shell] [iOS & Mac] SearchHandler retains previous page state when
switching top tabs](#34693)
  </details>

## TabbedPage
- [Android] Fixed NullReferenceException in app with TabBar after
returning from minimized state by @NirmalKumarYuvaraj in
#34779
  <details>
  <summary>🔧 Fixes</summary>

- [NullReferenceException in app with TabBar after returning from
minimized state](#34720)
  </details>

## Titlebar
- Fixed BindingContext of the Window TitleBar is not being passed on to
its child content. by @NirmalKumarYuvaraj in
#30080
  <details>
  <summary>🔧 Fixes</summary>

- [The BindingContext of the Window TitleBar is not being passed on to
its child content.](#24831)
  </details>

- [Windows/Mac] Fix RTL FlowDirection causes overlap with native window
control buttons in TitleBar by @devanathan-vaithiyanathan in
#30400
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows, Mac] RTL FlowDirection causes overlap with native window
control buttons in
TitleBar](#30399)
  </details>

## WebView
- [Windows] Fix WebView background color not being applied by
@SubhikshaSf4851 in #34599
  <details>
  <summary>🔧 Fixes</summary>

- [WebView background color has changed after update, can't
override.](#34518)
  </details>

- [Android] Fix for WebView/HybridWebView briefly flashes full screen
before layout completes by @praveenkumarkarunanithi in
#33207
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] HybridWebView briefly resizes to full screen when page is
opened before snapping back to correct
size](#31475)
  </details>

## Xaml
- Improved style inheritance by @kubaflo in
#31317
  <details>
  <summary>🔧 Fixes</summary>

- [Styles based on a style that is based on another style that uses
AppThemeBinding do not inherit properties
correctly.](#31280)
  </details>

- Fix for VisualStateManager Setter.TargetName failing when
ControlTemplate is applied by @BagavathiPerumal in
#33208
  <details>
  <summary>🔧 Fixes</summary>

- [Setter.TargetName + ControlTemplate
crash](#26977)
  </details>


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

- [Testing] Additional Feature Matrix Event Test Cases for Slider and
ScrollView by @nivetha-nagalingam in
#34352
- [Testing] Fixed Build error on inflight/ candidate PR 34885 by
@NafeelaNazhir in #34891
- [Testing] Fixed UI test image failure in PR 34885 - [13/4/2026] by
@NafeelaNazhir in #34933
- Fixed test failure - CursorPositionUpdatesWhenSearchBarGainsFocus by
@Dhivya-SF4094 in #34938

</details>

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

- Fix Loaded event not called for MAUI View added to native View by
@NirmalKumarYuvaraj in #34345
  <details>
  <summary>🔧 Fixes</summary>

- [Loaded event not called for MAUI View added to native
View](#34310)
  </details>
- Add public IAlertManager and IAlertManagerSubscription interfaces by
@Redth in #34228
  <details>
  <summary>🔧 Fixes</summary>

- [Alert/Dialog system (`DisplayAlert`, `DisplayActionSheet`,
`DisplayPromptAsync`) needs a public extensibility
point](#34104)
  </details>
- Fix crash when displaying alerts on unloaded pages by @kubaflo in
#33288

</details>

<details>
<summary>📝 Issue References</summary>

Fixes #5825, Fixes #8494, Fixes #8716, Fixes #10987, Fixes #11404, Fixes
#12008, Fixes #18200, Fixes #18551, Fixes #18657, Fixes #18701, Fixes
#19168, Fixes #19209, Fixes #20062, Fixes #20348, Fixes #20834, Fixes
#20991, Fixes #21983, Fixes #22038, Fixes #22193, Fixes #22197, Fixes
#22769, Fixes #23330, Fixes #23854, Fixes #23902, Fixes #23921, Fixes
#24304, Fixes #24831, Fixes #25124, Fixes #26059, Fixes #26397, Fixes
#26644, Fixes #26846, Fixes #26961, Fixes #26977, Fixes #27086, Fixes
#27367, Fixes #27959, Fixes #28337, Fixes #28351, Fixes #28660, Fixes
#28975, Fixes #29390, Fixes #29391, Fixes #29463, Fixes #29493, Fixes
#29544, Fixes #30052, Fixes #30065, Fixes #30071, Fixes #30144, Fixes
#30399, Fixes #30779, Fixes #30803, Fixes #30970, Fixes #31280, Fixes
#31446, Fixes #31475, Fixes #31496, Fixes #31565, Fixes #31825, Fixes
#31961, Fixes #32048, Fixes #32050, Fixes #32139, Fixes #32356, Fixes
#32419, Fixes #32771, Fixes #32944, Fixes #32984, Fixes #32994, Fixes
#33308, Fixes #33501, Fixes #33703, Fixes #33770, Fixes #33773, Fixes
#34104, Fixes #34256, Fixes #34257, Fixes #34310, Fixes #34322, Fixes
#34363, Fixes #34370, Fixes #34459, Fixes #34518, Fixes #34583, Fixes
#34591, Fixes #34666, Fixes #34693, Fixes #34720, Fixes #34730

</details>

**Full Changelog**:
main...inflight/candidate
@github-actions github-actions Bot locked and limited conversation to collaborators Apr 30, 2026
@kubaflo kubaflo added s/agent-fix-win AI found a better alternative fix than the PR s/agent-changes-requested AI agent recommends changes - found a better alternative or issues and removed s/agent-approved AI agent recommends approval - PR fix is correct and optimal s/agent-fix-pr-picked AI could not beat the PR fix - PR is the best among all candidates labels May 20, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-controls-flyoutpage FlyoutPage community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/windows s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-fix-win AI found a better alternative fix than the PR s/agent-gate-passed AI verified tests catch the bug (fail without fix, pass with fix) s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Flyout Page SetCollapseStyle doesn't have any change

7 participants