[Mac] Fixed the Issue with the TitleBar TrailingContent not being properly aligned#36541
[Mac] Fixed the Issue with the TitleBar TrailingContent not being properly aligned#36541Ahamed-Ali wants to merge 2 commits into
Conversation
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 36541Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 36541" |
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Pull request overview
This PR addresses a macOS/MacCatalyst TitleBar rendering issue where TrailingContent becomes misaligned when it contains an IContentView (e.g., Border) whose Content is a layout, by expanding the safe-area ignore logic and adding a UI test coverage scenario.
Changes:
- Update
LayoutExtensions.IgnoreLayoutSafeAreato recurse into layouts hosted insideIContentView.Content. - Add a HostApp repro page (
Issue29516) that setsWindow.TitleBarand places a layout inside aBorderinTrailingContent. - Add an Appium screenshot test (
Issue29516) validating correct TitleBar rendering (including the TitleBar region).
Reviewed changes
Copilot reviewed 3 out of 5 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/Controls/src/Core/Layout/LayoutExtensions.cs | Expands safe-area ignore recursion to reach layout content inside IContentView. |
| src/Controls/tests/TestCases.HostApp/Issues/Issue29516.cs | Adds a TitleBar repro with TrailingContent containing a Border wrapping a layout. |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29516.cs | Adds a screenshot-based UI test to validate TitleBar trailing content alignment. |
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 1 findings
See inline comments for details.
|
/azp run |
|
Azure Pipelines successfully started running 3 pipeline(s). |
This comment has been minimized.
This comment has been minimized.
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 3 findings
See inline comments for details.
…xit code The snapshot-diff image embed (best-effort) runs native commands (gh/git). When the maui-bot PAT lacks the 'gist' scope, `gh api gists` fails and leaves $LASTEXITCODE non-zero. On a gate-FAILED PR the Post job takes the deferred / no-PRAgent branch, which runs no later native command to reset it, so the whole "Post AI summary review" task inherited exit code 1 and failed (deep results never posted). Reset $LASTEXITCODE to 0 after the best-effort embed so it can never affect the task result. Observed on build 14701124 (PR #36561, catalyst); build 14701123 (PR #36541, gate passed) posted a review afterward and was unaffected. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 15d2af20-e4ab-4e88-9011-cfbd83513bc0
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 1 findings
See inline comments for details.
This comment has been minimized.
This comment has been minimized.
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 3 findings
See inline comments for details.
| { | ||
| IgnoreLayoutSafeArea(childLayout); | ||
| } | ||
| else if (child is IContentView contentView) |
There was a problem hiding this comment.
🔍 AI-Generated Review (multi-model)
[major] Logic and Correctness — This only handles IContentView when it is a child of a Layout, but TitleBar.LeadingContent, Content, and TrailingContent are typed as IView and TitleBar still calls the helper only via (newValue as Layout)?.IgnoreLayoutSafeArea(). A valid title-bar slot such as TrailingContent = new Border { Content = new StackLayout(...) } has an IContentView root, so the helper is never invoked and the nested layout still receives safe-area adjustment. Please invoke the helper for IContentView roots as well, or otherwise normalize all title-bar slot roots through the same recursive path.
| } | ||
| else if (child is IContentView contentView) | ||
| { | ||
| if (contentView.PresentedContent is Layout presentedLayout) |
There was a problem hiding this comment.
🔍 AI-Generated Review (multi-model)
[major] Safe Area and Window Insets — The recursion stops unless the immediate PresentedContent/Content is a Layout. Nested wrapper chains that are valid MAUI content, for example HorizontalStackLayout > Border > ContentView > StackLayout or HorizontalStackLayout > Border > Border > StackLayout, leave the inner layout unchanged because the first wrapper's presented content is another IContentView, not a Layout. The traversal needs to continue through IContentView nodes until it reaches layouts, otherwise common TitleBar compositions still render with the unwanted safe-area offset.
| [Category(UITestCategories.Window)] | ||
| public void TitleBarTrailingContentShouldRenderProperly() | ||
| { | ||
| App.WaitForElement("ContentLabel"); |
There was a problem hiding this comment.
🔍 AI-Generated Review (multi-model)
[moderate] Regression Prevention and Test Coverage — This waits for ContentLabel in the page body, then screenshots the title bar. Window.TitleBar is assigned in OnAppearing and its native title-bar content can be realized later than the page content, so the test can capture before the trailing/title-bar content is actually present. Please give a TitleBar sentinel (for example the trailing label) an AutomationId and wait for that before VerifyScreenshot(includeTitleBar: true).
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 2 findings
See inline comments for details.
| { | ||
| IgnoreLayoutSafeArea(childLayout); | ||
| } | ||
| else if (child is IContentView contentView) |
There was a problem hiding this comment.
🔍 AI-Generated Review (multi-model)
[moderate] Logic and Correctness — The new else if (child is IContentView contentView) block only traverses one IContentView level. If PresentedContent/Content is itself an IContentView rather than a Layout, recursion stops and any Layout nested within is silently skipped.
Concrete gap: HorizontalStackLayout { ContentView { Border { StackLayout } } } — ContentView.PresentedContent == ContentView.Content == Border (not a Layout), so neither branch fires and StackLayout never receives IgnoreSafeArea = true. The fix is correct for the reported one-level case (HorizontalStackLayout > Border > StackLayout) but leaves two-level IContentView chains unprotected.
Consider adding a recursive helper so that when PresentedContent/Content is an IContentView (rather than a Layout), the same walk continues into it:
static void IgnoreContentViewSafeArea(IContentView contentView)
{
var inner = contentView.PresentedContent ?? contentView.Content;
if (inner is Layout innerLayout)
IgnoreLayoutSafeArea(innerLayout);
else if (inner is IContentView innerContentView)
IgnoreContentViewSafeArea(innerContentView);
}| public void TitleBarTrailingContentShouldRenderProperly() | ||
| { | ||
| App.WaitForElement("ContentLabel"); | ||
| VerifyScreenshot(includeTitleBar: true); |
There was a problem hiding this comment.
🔍 AI-Generated Review (multi-model)
[moderate] Regression Prevention and Test Coverage — WaitForElement("ContentLabel") only confirms the page body is loaded; it does not guarantee the TitleBar has finished its layout pass. Window.TitleBar = _titleBar is set in OnAppearing, which may trigger an asynchronous layout pass on the native side. Without retryTimeout:, VerifyScreenshot retries only once (with a 500 ms delay), which may not be enough to capture a fully-rendered TitleBar, leading to a flaky baseline mismatch.
The recommended fix is to add AutomationId = "TrailingContentLabel" to the Label inside the Border's StackLayout in the host-app fixture, then call App.WaitForElement("TrailingContentLabel") before the screenshot so the test blocks until the TitleBar content is actually visible. Alternatively, pass retryTimeout: TimeSpan.FromSeconds(5) here:
VerifyScreenshot(includeTitleBar: true, retryTimeout: TimeSpan.FromSeconds(5));
MauiBot
left a comment
There was a problem hiding this comment.
AI Review Summary
@Ahamed-Ali — new AI review results are available based on this last commit:
fba7afb. To request a fresh review after new comments or commits, comment/review rerun.
🗂️ Review Sessions — click to expand
🚦 Gate — Test Before & After Fix
Gate Result: ⚠️ INCONCLUSIVE
Platform: CATALYST · Base: main · Merge base: 76c77c03
📷 Snapshot baseline not reproducible on this agent — inconclusive — with the fix applied, the only remaining VerifyScreenshot failure is a LARGE diff (tens of percent) that is essentially UNCHANGED from the WITHOUT-fix run — the fix moved the pixel difference by under 1 percentage point. That is the signature of a cross-machine baseline mismatch: the committed baseline PNG was captured on a different machine and this CI agent renders the control (commonly the macOS TitleBar / window chrome) differently, swamping any fix effect. The gate cannot tell an environmental mismatch from an ineffective fix, so this is inconclusive, not a confirmed fix failure — inspect the snapshots-diff artifact manually and, if the render is correct, regenerate the baseline PNG on the target agent.
| Test | Without Fix (expect FAIL) | With Fix (expect PASS) |
|---|---|---|
🖥️ Issue29516 Issue29516 |
✅ FAIL — 117s |
🔴 Without fix — 🖥️ Issue29516: FAIL ✅ · 117s
Error-relevant lines (filtered from the build log):
at VisualTestUtils.VisualRegressionTester.Fail(String message) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 162
at VisualTestUtils.VisualRegressionTester.VerifyMatchesSnapshot(String name, ImageSnapshot actualImage, String environmentName, ITestContext testContext) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 123
at Microsoft.Maui.TestCases.Tests.UITest.<VerifyScreenshot>g__Verify|13_0(String name, <>c__DisplayClass13_0&) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 477
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 309
at Microsoft.Maui.TestCases.Tests.Issues.Issue29516.TitleBarTrailingContentShouldRenderProperly() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29516.cs:line 20
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
🟢 With fix — 🖥️ Issue29516: ⚠️ ENV ERROR · 216s
Error-relevant lines (filtered from the build log):
at VisualTestUtils.VisualRegressionTester.Fail(String message) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 162
at VisualTestUtils.VisualRegressionTester.VerifyMatchesSnapshot(String name, ImageSnapshot actualImage, String environmentName, ITestContext testContext) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 123
at Microsoft.Maui.TestCases.Tests.UITest.<VerifyScreenshot>g__Verify|13_0(String name, <>c__DisplayClass13_0&) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 477
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 309
at Microsoft.Maui.TestCases.Tests.Issues.Issue29516.TitleBarTrailingContentShouldRenderProperly() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29516.cs:line 20
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
⚠️ Failure Details
⚠️ Issue29516 with fix:With-fix run fails only VerifyScreenshot snapshot diff(s) that are LARGE (max 43.09%) and essentially UNCHANGED from the without-fix run — the fix moved the pixel difference by under ~1 percentage point. The committed baseline PNG cannot be reproduced on this gate agent (a cross-machine rendering mismatch, e.g. macOS TitleBar / window chrome), which swamps any fix effect, so the gate cannot distinguish an environmental mismatch from an ineffective fix. INCONCLUSIVE — a human should inspect the snapshots-diff artifact; if the render is correct, regenerate the baseline on the target agent.
📁 Fix files reverted (1 files)
src/Controls/src/Core/Layout/LayoutExtensions.cs
📱 UI Tests — Layout,Window
Detected UI test categories: Layout,Window
❌ Deep UI tests — 18 passed, 190 failed across 2 categories on platform-pool agent (replaces in-process counts above).
🧪 UI Test Execution Results (deep, platform pool)
| Category | Tests | Snapshot diffs |
|---|---|---|
Layout |
18/197 (175 ❌) | 188 diff PNGs |
Window |
0/15 (15 ❌) | — |
🔍 AI analysis of failures — PR-related vs unrelated
🔍 AI-generated triage (GitHub Copilot CLI) — a heuristic judgement of whether each deep UI test failure is connected to this PR's changes. Verify before relying on it.
Likely PR-related: one or more failures appear connected to this PR's changes.
- ✗ PR-related — Broad Catalyst layout regressions (170+ tests): the PR changes shared
LayoutExtensions.IgnoreLayoutSafeArea, and the failing Layout bucket is dominated by Grid/FlexLayout/AbsoluteLayout/BindableLayout/StackLayout visual diffs and element timeouts that plausibly follow from a shared layout/safe-area behavior change on Catalyst. - ✗ PR-related — Newly added TitleBar trailing-content test (1 test):
TitleBarTrailingContentShouldRenderProperlyis introduced by this PR for Mac Catalyst/Windows and fails on the Catalyst run while waiting for the new page content, so it is directly tied to the PR’s test surface. - ℹ Uncertain — Existing TitleBar/window tests (~14 tests): these are in the same Window/TitleBar category as the PR’s new regression test, but they all fail with generic
Timed out waiting for elementerrors and the diff does not change TitleBar production code, so they could be collateral from the same Catalyst page/layout issue or pre-existing flakiness.
Strongest signal: the failures are concentrated in Catalyst Layout plus TitleBar, and the only production change is shared layout safe-area recursion; re-check a representative layout screenshot and the new TitleBar page startup failure first.
📸 Snapshot differences — baseline vs actual vs diff (top 25 of 188 · ranked by PR-relevance · full set in the artifact above)
For each failing
VerifyScreenshotsnapshot: the committed baseline, the actual render on this CI agent, and the computed diff. Ordered by likely PR-relevance — snapshots whose baseline/test file this PR changed are shown first. A large, uniform diff across many snapshots is usually a cross-machine baseline/environment mismatch (e.g. the macOS TitleBar / window chrome), not a code regression — compare against baseline history before concluding.
❌ Layout — 175 failed tests
FlexLayoutWrappingWithToleranceWorksCorrectly
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue30957.FlexLayoutWrappingWithToleranceWorksCorrectly() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30957.cs:line 19
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, Object
...
FlexLayout_SetAlignItemsCenterWrap
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_SetAlignItemsCenterWrap.png (26.73% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_SetAlignItemsCenterWrap() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 780
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHand
...
VerifyGrid_SetColumn
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: VerifyGrid_SetColumn.png (25.17% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.GridFeatureTests.VerifyGrid_SetColumn() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/GridFeatureTests.cs:line 55
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
at System.RuntimeMet
...
VerifyGrid_SetRow_SetColumnSpacing
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: VerifyGrid_SetRow_SetColumnSpacing.png (25.18% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.GridFeatureTests.VerifyGrid_SetRow_SetColumnSpacing() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/GridFeatureTests.cs:line 417
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack re
...
VerifyGrid_HorizontalOptionsCenter
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: VerifyGrid_HorizontalOptionsCenter.png (25.17% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.GridFeatureTests.VerifyGrid_HorizontalOptionsCenter() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/GridFeatureTests.cs:line 204
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack re
...
ModifyingANonVisibleLayoutWorks
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24434.ModifyingANonVisibleLayoutWorks() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24434.cs:line 19
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack
...
FlexLayout_BasisAuto_DirectionColumnReverse
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_BasisAuto_DirectionColumnReverse.png (26.63% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_BasisAuto_DirectionColumnReverse() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 721
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConst
...
FlexLayoutCycleException
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue9075.FlexLayoutCycleException() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue9075.cs:line 20
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL
...
FlexLayout_BasisFixed_DirectionRowReverse
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_BasisFixed_DirectionRowReverse.png (25.86% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_BasisFixed_DirectionRowReverse() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 628
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstruct
...
NonAppCompatBasicSwitchTest
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue6260.NonAppCompatBasicSwitchTest() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue6260.cs:line 22
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, B
...
NestedOuterLayoutWithAutomationIdIsFoundByAppium
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue4715.NestedOuterLayoutWithAutomationIdIsFoundByAppium() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue4715.cs:line 67
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, Objec
...
VerifyBindableLayoutWithItemsSourceNone
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: VerifyBindableLayoutWithItemsSourceNone.png (41.99% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at VisualTestUtils.VisualRegressionTester.Fail(String message) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 162
at VisualTestUtils.VisualRegressionTester.VerifyMatchesSnapshot(String name, ImageSnapshot actualImage, String environmentName, ITestContext testContext) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 123
at Microsoft.Maui.TestCases.Tests.UITest.<VerifyScreenshot>g__Verify|13_0(String name, <>c__DisplayClass13_0&) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 477
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 r
...
FlexLayout_JustifyContentSpaceBetween
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_JustifyContentSpaceBetween.png (26.45% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_JustifyContentSpaceBetween() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 404
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, Obje
...
FlexLayout_Child1Order
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_Child1Order.png (27.32% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_Child1Order() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 543
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result)
at
...
FlexLayout_DirectionColumn
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_DirectionColumn.png (26.51% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_DirectionColumn() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 344
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack result
...
FlexLayout_BasisAuto_DirectionRow
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_BasisAuto_DirectionRow.png (27.20% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_BasisAuto_DirectionRow() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 560
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandle
...
VerifyAbsoluteLayout_YProportional
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: VerifyAbsoluteLayout_YProportional.png (23.81% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.AbsoluteLayoutFeatureTests.VerifyAbsoluteLayout_YProportional() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/AbsoluteLayoutFeatureTests.cs:line 116
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.RuntimeMethodInfo.Invo
...
FlexLayout_SetWrapAlignContentSpaceAround
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_SetWrapAlignContentSpaceAround.png (27.56% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_SetWrapAlignContentSpaceAround() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 112
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstruct
...
VerticalStackLayout_Spacing_With_RTL
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.StackLayoutFeatureTests.VerticalStackLayout_Spacing_With_RTL() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/StackLayoutFeatureTests.cs:line 87
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void**
...
FlexLayout_AlignSelfStretch
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_AlignSelfStretch.png (27.20% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_AlignSelfStretch() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 488
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack resu
...
TwoPaneView_Wide_UsingRect
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.TwoPaneViewFeatureTests.TwoPaneView_Wide_UsingRect() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/TwoPaneViewFeatureTests.cs:line 89
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments,
...
VerifyGrid_SetRowSpacingAndPadding
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: VerifyGrid_SetRowSpacingAndPadding.png (24.99% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.GridFeatureTests.VerifyGrid_SetRowSpacingAndPadding() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/GridFeatureTests.cs:line 455
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStack re
...
VerifyAbsoluteLayout_HeightProportional
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: VerifyAbsoluteLayout_HeightProportional.png (28.36% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.AbsoluteLayoutFeatureTests.VerifyAbsoluteLayout_HeightProportional() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/AbsoluteLayoutFeatureTests.cs:line 206
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodBaseIn
...
FlexLayout_DirectionRowReverse
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_DirectionRowReverse.png (25.86% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_DirectionRowReverse() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 326
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectHandleOnStac
...
VerifyBindableLayoutWithGridItemTemplate
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: VerifyBindableLayoutWithGridItemTemplate.png (30.92% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at VisualTestUtils.VisualRegressionTester.Fail(String message) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 162
at VisualTestUtils.VisualRegressionTester.VerifyMatchesSnapshot(String name, ImageSnapshot actualImage, String environmentName, ITestContext testContext) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 123
at Microsoft.Maui.TestCases.Tests.UITest.<VerifyScreenshot>g__Verify|13_0(String name, <>c__DisplayClass13_0&) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 477
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1
...
LabelDisplayWithoutCroppingInsideVerticalLayout
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue15559.LabelDisplayWithoutCroppingInsideVerticalLayout() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue15559.cs:line 18
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, Obje
...
Issue3475TestsLayoutCompressionPerformance
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue3475.Issue3475TestsLayoutCompressionPerformance() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/XFIssue/Issue3475.cs:line 26
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, Obj
...
FlexLayout_SetWrapAlignContentCenter
VisualTestUtils.VisualTestFailedException :
Snapshot different than baseline: FlexLayout_SetWrapAlignContentCenter.png (28.81% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.
More info: https://aka.ms/visual-test-workflow
at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 296
at Microsoft.Maui.TestCases.Tests.FlexLayoutFeatureTests.FlexLayout_SetWrapAlignContentCenter() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/FlexLayoutFeatureTests.cs:line 61
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isConstructor, ObjectH
...
CEmptyViewStringHidesWhenItemsSourceIsFilled
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue6932_emptyviewstring.CEmptyViewStringHidesWhenItemsSourceIsFilled() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/XFIssue/Issue6932_emptyviewstring.cs:line 47
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnS
...
TwoPaneView_Pane2SizeIncrease
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.TwoPaneViewFeatureTests.TwoPaneView_Pane2SizeIncrease() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/TwoPaneViewFeatureTests.cs:line 277
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** argume
...
(+145 more — see TRX in artifact)
❌ Window — 15 failed tests
TitleBarWithLargeHeightShell
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24489_Shell.TitleBarWithLargeHeightShell() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24489_Shell.cs:line 51
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at Syst
...
TitleBarWithLargeHeight
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24489_2.TitleBarWithLargeHeight() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24489_2.cs:line 49
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection
...
OpenAlertWithModals
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue21948.OpenAlertWithModals() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue23360.cs:line 18
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection.MethodB
...
VerifyTitleBarAlignment
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue33136.VerifyTitleBarAlignment() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue33136.cs:line 18
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOO
...
NavBarResetsColorAfterSmallTitleBar
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24489_2.NavBarResetsColorAfterSmallTitleBar() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24489_2.cs:line 78
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at Syste
...
VerifyTitleBarLTR
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue30399.VerifyTitleBarLTR() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30399.cs:line 20
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isCo
...
TitleBarIsImplemented1
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24489.TitleBarIsImplemented1() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24489.cs:line 20
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL
...
TitleBarShouldPropagateBindingContext
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24831.TitleBarShouldPropagateBindingContext() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24831.cs:line 22
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOn
...
TitleBarWithSmallHeight
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24489_2.TitleBarWithSmallHeight() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24489_2.cs:line 23
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at System.Reflection
...
VerifyTitleBarRTL
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue30399.VerifyTitleBarRTL() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30399.cs:line 29
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHandleOnStack sig, BOOL isCo
...
NavBarResetsColorAfterLargeTitleBar
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24489_2.NavBarResetsColorAfterLargeTitleBar() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24489_2.cs:line 89
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at Syste
...
NavBarResetsColorAfterLargeTitleBarShell
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24489_Shell.NavBarResetsColorAfterLargeTitleBarShell() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24489_Shell.cs:line 96
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args
...
NavBarResetsColorAfterSmallTitleBarShell
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24489_Shell.NavBarResetsColorAfterSmallTitleBarShell() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24489_Shell.cs:line 85
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args
...
TitleBarWithSmallHeightShell
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue24489_Shell.TitleBarWithSmallHeightShell() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue24489_Shell.cs:line 23
at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
at Syst
...
TitleBarTrailingContentShouldRenderProperly
System.TimeoutException : Timed out waiting for element...
at UITest.Appium.HelperExtensions.Wait(Func`1 query, Func`2 satisfactory, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2757
at UITest.Appium.HelperExtensions.WaitForAtLeastOne(Func`1 query, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 2784
at UITest.Appium.HelperExtensions.WaitForElement(IApp app, String marked, String timeoutMessage, Nullable`1 timeout, Nullable`1 retryFrequency, Nullable`1 postTimeout) in /_/src/TestUtils/src/UITest.Appium/HelperExtensions.cs:line 793
at Microsoft.Maui.TestCases.Tests.Issues.Issue29516.TitleBarTrailingContentShouldRenderProperly() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29516.cs:line 19
at System.RuntimeMethodHandle.InvokeMethod(ObjectHandleOnStack target, Void** arguments, ObjectHa
...
📎 Download drop-deep-uitests artifact (TRX + snapshot diffs)
📋 Pre-Flight — Context & Validation
Issue: #29516 - Issue with the TitleBar TrailingContent not being properly aligned on macOS
PR: #36541 - [Mac] Fixed the Issue with the TitleBar TrailingContent not being properly aligned
Platforms Affected: MacCatalyst (primary), Windows test snapshot also added
Files Changed: 1 implementation, 4 test
Key Findings
- The PR modifies
LayoutExtensions.IgnoreLayoutSafeArea(Layout)so a layout-root TitleBar slot can recurse into one directIContentViewchild and setIgnoreSafeAreaon a containedLayout. - Existing TitleBar call sites still invoke the helper only through
(newValue as Layout)?.IgnoreLayoutSafeArea()for Leading/Content/Trailing slots, even though those properties are typed asIView. - Prior inline reviews repeatedly flagged two unresolved correctness gaps: root
IContentViewTitleBar content is skipped, and nested content-view wrapper chains stop before reaching inner layouts. - The Catalyst gate result supplied to this agent is inconclusive due to build/environment failure; it must not be treated as a failing fix.
Code Review Summary
Verdict: NEEDS_CHANGES
Confidence: low
Errors: 2 | Warnings: 1 | Suggestions: 0
Key code review findings:
- ✗
src/Controls/src/Core/Layout/LayoutExtensions.cs:17- TitleBar content rooted atIContentViewis still skipped becauseTitleBarcall sites only dispatchLayoutroots. - ✗
src/Controls/src/Core/Layout/LayoutExtensions.cs:19-23-IContentViewtraversal is not recursive through wrapper chains such asBorder -> ContentView -> StackLayout. - ⚠
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29516.cs:19- The UI test waits on page body content instead of the TitleBar content being screenshotted.
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| PR | PR #36541 | Extend IgnoreLayoutSafeArea(Layout) to handle one direct IContentView child whose immediate content is a Layout. |
src/Controls/src/Core/Layout/LayoutExtensions.cs; UI test/snapshots |
Original PR; narrow fix for Layout > IContentView > Layout shape. |
🔬 Code Review — Deep Analysis
Code Review — PR #36541
Independent Assessment
What this changes: Extends LayoutExtensions.IgnoreLayoutSafeArea(Layout) so, while traversing a Layout tree, it also looks through direct IContentView children and applies IgnoreSafeArea to a contained Layout. Adds a TitleBar screenshot UI test for issue 29516.
Inferred motivation: TitleBar content should render edge-to-edge inside window chrome; a layout nested inside a Border/content wrapper was still obeying safe area and became misaligned.
Reconciliation with PR Narrative
Author claims: The PR fixes TitleBar TrailingContent alignment by recursively applying IgnoreSafeArea = true to layouts contained in IContentView instances, and adds Mac/Windows screenshot coverage.
Agreement/disagreement: The code fixes the specific Layout -> Border -> Layout shape used by the new test. It does not fully match the broader "any IContentView" / recursive claim: root IContentView TitleBar content still never enters the helper, and wrapper chains deeper than one IContentView still stop before reaching inner layouts.
Prior Review Reconciliation
| Prior ❌ Error Finding | Source | Status | Evidence |
|---|---|---|---|
Root IContentView TitleBar content never enters helper |
MauiBot [major] inline reviews |
❌ Unresolved | TitleBar still calls the helper only as (newValue as Layout)?.IgnoreLayoutSafeArea() at the Leading/Content/Trailing property handlers, so a valid root Border/ContentView slot skips the new branch. |
| Recursion stops after one content wrapper | MauiBot [major] inline review |
❌ Unresolved | LayoutExtensions.cs:19-23 only recurses when immediate PresentedContent/Content is a Layout; Border -> ContentView -> StackLayout is still missed. |
| Test waits on page body instead of TitleBar content | MauiBot [moderate] inline reviews |
❌ Unresolved | Issue29516.cs:19 waits for ContentLabel, which is outside the title bar being screenshotted. |
Blast Radius Assessment
- Runs for all instances: No; only TitleBar slot values that are
Layoutroots currently call this helper. - Startup impact: Low; runs on TitleBar content property changes, not global startup.
- Static/shared state: No new static/shared state.
- Scope: Shared Controls layout/safe-area UI plumbing; max confidence medium before CI, low after CI.
CI Status
- Required-check result:
gh pr checks --requiredunavailable becauseghis unauthenticated. Public GitHub check-run API for headfba7afbshows failingmaui-pr,maui-pr-devicetests,maui-pr-uitests, andBuild Analysis, plus failed/cancelled child legs. - Classification: Undetermined / not merge-ready; prior
/review testscomments report red device/UI evidence requiring investigation. - Action taken: Invoked
azdo-build-investigator;ci-analysisskill was unavailable, so public check-run data plus existing deterministic test-failure comments were used. Confidence capped low.
Findings
❌ Error — TitleBar content rooted at IContentView is still skipped
src/Controls/src/Core/Layout/LayoutExtensions.cs:17
The new branch only runs after traversal has already entered IgnoreLayoutSafeArea(Layout). But TitleBar.LeadingContent, Content, and TrailingContent accept IView, and the unchanged call sites still invoke this helper only for Layout roots. A valid slot like:
TrailingContent = new Border { Content = new StackLayout { ... } }never enters this traversal, so the inner layout can still obey title-bar safe area. The fix should start from an IView/IContentView root or update the TitleBar property handlers to dispatch all non-null slot content through a recursive helper.
❌ Error — IContentView traversal is not actually recursive through wrapper chains
src/Controls/src/Core/Layout/LayoutExtensions.cs:19-23
The branch only recurses when the immediate PresentedContent or Content is a Layout. Common nested content-view chains such as:
HorizontalStackLayout -> Border -> ContentView -> StackLayoutstill stop at the first wrapper because its content is another IContentView, not a Layout. Since the PR's stated purpose is recursive safe-area suppression for layouts contained inside IContentView, the traversal should continue through IContentView nodes until it reaches nested layouts.
⚠️ Warning — Screenshot test does not wait for the TitleBar content under test
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue29516.cs:19
The test waits for ContentLabel, which is in the page body, then screenshots the title bar. On desktop platforms the native title bar content can materialize independently of body content. Add an AutomationId to the trailing TitleBar sentinel/control and wait for that before VerifyScreenshot(includeTitleBar: true).
Failure-Mode Probing
- Root content is
Border: helper is never called because the TitleBar setters still cast toLayout; bug remains. - Nested wrapper chain: traversal stops if an
IContentViewcontains anotherIContentViewbefore the layout; inner layout remains unchanged. - Null content: current null checks avoid crashes.
- Handler disconnect/reconnect: no new subscriptions or static state, so no accumulation risk.
- Existing reported shape
HorizontalStackLayout -> Border -> StackLayout: this specific shape is addressed.
Verdict: NEEDS_CHANGES
Confidence: low
Summary: The change handles the narrow test shape but leaves unresolved prior major correctness findings for valid TitleBar content compositions and incomplete recursion. CI is also red/undetermined from public check-run data, so this cannot be considered merge-ready.
🛠️ Fix — Analysis & Comparison
Fix Candidates
| # | Source | Approach | Test Result | Files Changed | Notes |
|---|---|---|---|---|---|
| 1 | try-fix-1 | Add an internal IView entry point in LayoutExtensions, call it from all TitleBar slot setters, and recursively traverse IContentView roots/chains. |
✅ Targeted unit tests passed; Catalyst gate not rerun | 3 files | Best balance of coverage and locality; fixes root IContentView, nested wrappers, and custom templates because policy runs when slot properties change. |
| 2 | try-fix-2 | Replace default-template slot ContentViews with a private TitleBarSlotContentView that applies safe-area policy when template-bound content is inserted. |
✅ Targeted unit tests passed after nullable override fix; Catalyst gate not rerun | 2 files | More scoped than #1, but only helps default templates that use the specialized hosts. |
| 3 | try-fix-3 | Treat non-explicit safe-area descendants of a platform ITitleBar ancestor as SafeAreaRegions.None in MauiView/MauiScrollView. |
net10.0-maccatalyst Core assets |
2 files | Most comprehensive conceptually, but highest risk because it changes iOS/MacCatalyst platform safe-area hot paths. |
| 4 | try-fix-4 | Add a Controls-layer safe-area ancestor policy: safe-area-aware controls return None when logically under TitleBar unless SafeAreaEdges is explicit. |
✅ TitleBar and SafeArea unit tests passed; Catalyst gate not rerun | 6 files | Avoids platform hot paths and preserves explicit safe area, but changes shared safe-area semantics across several controls. |
| PR | PR #36541 | Extend IgnoreLayoutSafeArea(Layout) to handle one direct IContentView child whose immediate content is a Layout. |
5 files | Original PR; handles the reported layout-root shape but not root IContentView slots or deeper wrapper chains. |
Cross-Pollination
| Model | Round | New Ideas? | Details |
|---|---|---|---|
| maui-expert-reviewer | 1 | Yes | Proposed root IView traversal from TitleBar setters, implemented as try-fix-1. |
| maui-expert-reviewer | 2 | Yes | Proposed scoped default-template slot host, implemented as try-fix-2. |
| maui-expert-reviewer | 3 | Yes | Proposed iOS/MacCatalyst platform safe-area policy, implemented as try-fix-3 but validation blocked. |
| maui-expert-reviewer | 4 | Yes | Proposed Controls-layer safe-area ancestor policy, implemented as try-fix-4. |
Exhausted: Yes — after four materially different designs, remaining variations reduce to moving the same recursive traversal/policy between helper classes without changing behavior. The only additional direction would require broader architecture work around TitleBar safe-area ownership and should not be generated as a trivial try-fix.
Selected Fix: Candidate #1 — It is demonstrably better than the PR because it covers root IContentView slot content and arbitrary nested content-wrapper chains while staying localized to TitleBar property changes plus the existing layout helper. Candidate #4 is also viable and passed broader safe-area tests, but it has a larger shared safe-area blast radius. Candidate #2 is narrower but misses custom templates. Candidate #3 is too risky and locally blocked.
📝 Recommended PR Title & Description
Assessment: ✏️ Recommend updating — the current metadata describes the raw PR's narrower one-level IContentView traversal, but the winning fix applies safe-area suppression from TitleBar IView slots through nested content-view chains and improves the screenshot wait target.
Recommended title
[MacCatalyst] TitleBar: Recursively suppress safe area for slot content
Recommended description
### Root Cause of the issue
- `TitleBar.LeadingContent`, `TitleBar.Content`, and `TitleBar.TrailingContent` are typed as `IView`, but the TitleBar property handlers only applied the TitleBar safe-area suppression helper when the slot root was a `Layout`.
- When TitleBar slot content used `IContentView` wrappers such as `Border` or `ContentView`, layouts inside those wrappers could keep their default safe-area behavior. This caused TitleBar trailing content to render misaligned within the MacCatalyst window title bar.
- A one-level unwrap is not enough for common compositions such as `HorizontalStackLayout -> Border -> ContentView -> StackLayout`.
### Description of Change
- Added an internal `IView` entry point for `IgnoreLayoutSafeArea` so TitleBar slot content can be processed whether the slot root is a `Layout` or an `IContentView`.
- Updated the TitleBar LeadingContent, Content, and TrailingContent property handlers to apply the helper to the full `IView` slot value.
- Updated the traversal to recurse through `IContentView.PresentedContent` / `Content` when those contents are any `IView`, allowing nested wrapper chains to reach inner layouts.
- Added targeted TitleBar unit coverage for root `IContentView` content and nested content-view wrapper chains.
- Added a MacCatalyst/Windows UI regression test for issue #29516 and made it wait for the TitleBar trailing content before taking the screenshot.
### Issues Fixed
Fixes #29516
### Platforms affected / tested
- MacCatalyst is the primary affected platform.
- Windows is included in the UI test guard because TitleBar is available on MacCatalyst and Windows.
- Targeted TitleBar unit tests passed for the winning fix; the supplied Catalyst screenshot gate was inconclusive due an environment/snapshot mismatch and was not rerun.
### Screenshot
| Before Issue Fix | After Issue Fix |
|----------|----------|
| <video src="https://github.com/user-attachments/assets/b74c8f23-e549-419b-8ca0-d6ee563b8f09"> | <video src="https://github.com/user-attachments/assets/cfaa839b-e3fb-47a9-89f6-55935eae589e"> |
🏁 Report — Final Recommendation
Comparative Report — PR #36541
Candidates compared
| Rank | Candidate | Regression / targeted test result | Assessment |
|---|---|---|---|
| 1 | pr-plus-reviewer |
Targeted TitleBar unit tests passed; Catalyst gate inconclusive and not rerun | Best overall. Keeps the PR's localized fix, resolves root IContentView and nested-wrapper gaps, and improves the UI test wait condition. |
| 2 | try-fix-1 |
Targeted TitleBar unit tests passed; Catalyst gate not rerun | Strongest independent STEP 5a candidate. Same core safe-area traversal direction as the reviewer-improved PR, but lacks the PR's existing UI repro/snapshot changes unless separately combined. |
| 3 | try-fix-2 |
Targeted TitleBar unit tests passed after fixing nullable override; Catalyst gate not rerun | Correct for default TitleBar templates and scoped to slot hosts, but misses custom TitleBar.ControlTemplate implementations that do not use the default host views. |
| 4 | try-fix-4 |
TitleBar and SafeArea unit tests passed; Catalyst gate not rerun | Viable but broader. It changes default safe-area semantics for several Controls types under TitleBar ancestry, which has a larger shared behavior blast radius than the setter/helper-based traversal. |
| 5 | pr |
Gate inconclusive; no candidate-specific targeted unit validation; expert review found two major correctness gaps | Fixes the reported Layout -> Border -> Layout shape but still skips root IContentView slot content and nested wrapper chains. |
| 6 | try-fix-3 |
Blocked before compile by missing net10.0-maccatalyst Core assets |
Conceptually broad, but highest risk because it changes iOS/MacCatalyst platform safe-area hot paths and was not compiled or tested. |
No candidate had a confirmed regression-test failure. Per the ranking rule, no passing candidate was ranked below a candidate that failed regression tests. Blocked or inconclusive candidates are ranked below candidates with successful targeted validation.
Key comparison points
pr is too narrow: it only enters the helper when the TitleBar slot root is a Layout, then only unwraps an IContentView if its immediate content is a Layout. That leaves valid TitleBar content rooted at Border/ContentView unfixed and misses deeper wrapper chains.
try-fix-1 and pr-plus-reviewer are the best technical shape because they make the safe-area policy start from the actual TitleBar slot value (IView) and recurse through both layout children and content-view wrappers. This keeps the behavior localized to TitleBar slot property changes and avoids changing platform safe-area hot paths or global safe-area semantics.
pr-plus-reviewer edges out try-fix-1 because it combines that stronger traversal with the PR's existing issue repro and applies the expert reviewer feedback to wait for the TitleBar content before screenshot capture. It is therefore the most complete candidate: implementation coverage, regression coverage, and reviewer concerns are all addressed together.
Winning candidate
Winner: pr-plus-reviewer
Rationale: pr-plus-reviewer is the only candidate that both preserves the PR's issue-specific UI coverage and fixes the expert reviewer's two major correctness gaps with targeted passing unit coverage. Its blast radius remains localized to TitleBar slot safe-area traversal, unlike the broader safe-area semantic and platform-layer alternatives.
🧭 Next Steps — review latest findings
No alternative fix was selected for this run. Review the session findings and CI results before merging.
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 3 findings
See inline comments for details.
| { | ||
| IgnoreLayoutSafeArea(childLayout); | ||
| } | ||
| else if (child is IContentView contentView) |
There was a problem hiding this comment.
🔍 AI-Generated Review (multi-model)
[major] Logic and Correctness — This only processes IContentView when it is already a child of a Layout, but TitleBar's LeadingContent/Content/TrailingContent properties are typed as IView and their handlers still enter this helper only via (newValue as Layout)?.IgnoreLayoutSafeArea(). A valid slot value such as TrailingContent = new Border { Content = new StackLayout { ... } } is therefore skipped entirely, so the Mac titlebar safe-area/alignment bug still reproduces for root IContentView wrappers. Please make the entry point handle IContentView (for example on IView) instead of only Layout roots.
| { | ||
| IgnoreLayoutSafeArea(presentedLayout); | ||
| } | ||
| else if (contentView.Content is Layout contentLayout) |
There was a problem hiding this comment.
🔍 AI-Generated Review (multi-model)
[major] Logic and Correctness — The new traversal only unwraps one IContentView level when its immediate PresentedContent/Content is a Layout. If users compose a titlebar slot as HorizontalStackLayout -> Border -> ContentView -> StackLayout, the inner layout never gets IgnoreSafeArea applied and the misalignment remains. Recurse through IContentView chains until the layout descendants are reached.
| [Category(UITestCategories.Window)] | ||
| public void TitleBarTrailingContentShouldRenderProperly() | ||
| { | ||
| App.WaitForElement("ContentLabel"); |
There was a problem hiding this comment.
🔍 AI-Generated Review (multi-model)
[moderate] Regression Prevention — The test waits for ContentLabel, which is in the page body, not in the titlebar being verified. That allows the screenshot to be captured before Window.TitleBar and its trailing content have finished loading/layout, making this regression test flaky and not proving the fixed element is present. Add an AutomationId/sentinel to the titlebar trailing content and wait for that element before VerifyScreenshot(includeTitleBar: true).






























































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!
Root Cause of the issue
Window.TitleBar, settingIgnoreSafeArea= true is essential to ensure proper rendering within the window bounds. However, when a Border (or any IContentView) containing a layout is added, this setting is not applied recursively. As a result, the inner layout does not ignore the safe area, leading to rendering issues.Description of Change
IgnoreSafeArea= true not only to direct child layouts, but also to layouts contained within IContentView instances.Issues Fixed
Fixes #29516
Tested the behaviour in the following platforms
Screenshot
TitleBarIssue.mov
TitleBarfix.mov