Skip to content

[Testing] Refactoring Feature Matrix UITest Cases for CheckBox Control#34283

Merged
kubaflo merged 7 commits intodotnet:inflight/currentfrom
LogishaSelvarajSF4525:refactoring-checkbox-feature
Mar 10, 2026
Merged

[Testing] Refactoring Feature Matrix UITest Cases for CheckBox Control#34283
kubaflo merged 7 commits intodotnet:inflight/currentfrom
LogishaSelvarajSF4525:refactoring-checkbox-feature

Conversation

@LogishaSelvarajSF4525
Copy link
Copy Markdown
Contributor

This pull request refactors and enhances the CheckBox feature matrix test page and its associated ViewModel. The main changes include renaming and simplifying the ViewModel, adding support for a shadow property on the CheckBox, improving the reset logic, and updating the UI and test constants to match these changes.

ViewModel Refactoring and Enhancement:

  • Renamed CheckBoxFeatureMatrixViewModel to CheckBoxViewModel, moved the color-setting logic into the ViewModel, and added a new Reset() method to centralize state resets. The ViewModel now also exposes a HasShadow property and a corresponding Shadow property, allowing the CheckBox to visually display a shadow when toggled. [1] [2] [3]

UI and Binding Updates:

  • Updated CheckBoxControlPage.xaml to use the new ViewModel name, bind the CheckBox's Shadow property, and add a UI toggle for the shadow feature. The reset button now calls the ViewModel's Reset() method. The color buttons were updated with text, color, and width for clarity. [1] [2] [3]

Logic and Usability Improvements:

  • The Switch controlling IsChecked is now disabled when the CheckBox is disabled, ensuring consistent behavior and preventing user interaction when not allowed.

Test Constants Update:

  • Added new automation IDs and constants in the test file to support the new UI elements (HasShadowCheckBox, color buttons, and command parameter entry).

Code Cleanup:

  • Removed unused commands and redundant code from the code-behind, delegating all state logic to the ViewModel for a cleaner separation of concerns.

These changes improve maintainability, testability, and feature coverage for the CheckBox control in the test app.

Issues Identified

@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Feb 27, 2026

🚀 Dogfood this PR with:

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

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

Or

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

@dotnet-policy-service dotnet-policy-service bot added community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration labels Feb 27, 2026
@sheiksyedm sheiksyedm marked this pull request as ready for review February 27, 2026 14:08
Copilot AI review requested due to automatic review settings February 27, 2026 14:08
@sheiksyedm
Copy link
Copy Markdown
Contributor

/azp run maui-pr-uitests

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

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 refactors the CheckBox FeatureMatrix test page and updates the corresponding FeatureMatrix UITests to match, including adding a “shadow” toggle and improving reset/state handling for more scenarios around checked/enabled/command/color behavior (related to #34278).

Changes:

  • Refactored the FeatureMatrix ViewModel (CheckBoxFeatureMatrixViewModelCheckBoxViewModel), moved color/shadow/reset logic into the VM, and simplified code-behind.
  • Updated the CheckBox FeatureMatrix page bindings/UI (new shadow toggle, shadow binding, updated reset behavior, updated color buttons and AutomationIds).
  • Expanded/reworked the FeatureMatrix UI tests and added an Android snapshot for CheckBox_VerifyColorAfterReset.

Reviewed changes

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

Show a summary per file
File Description
src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CheckBoxFeatureTests.cs Reworked and expanded CheckBox FeatureMatrix UITests; added ordering and new scenarios (shadow/commands/reset/color).
src/Controls/tests/TestCases.HostApp/FeatureMatrix/CheckBox/CheckBoxViewModel.cs New simplified ViewModel with centralized reset, color command, and shadow support.
src/Controls/tests/TestCases.HostApp/FeatureMatrix/CheckBox/CheckBoxControlPage.xaml.cs Simplified code-behind; reset now delegates to VM; removed redundant command wiring.
src/Controls/tests/TestCases.HostApp/FeatureMatrix/CheckBox/CheckBoxControlPage.xaml Updated bindings/UI to use new VM, bind Shadow, add shadow toggle, and adjust color/reset UI.
src/Controls/tests/TestCases.Android.Tests/snapshots/android/CheckBox_VerifyColorAfterReset.png Added/updated Android baseline image for the new/updated screenshot test.

@LogishaSelvarajSF4525 LogishaSelvarajSF4525 force-pushed the refactoring-checkbox-feature branch from c7198eb to 371d871 Compare March 3, 2026 07:21
@sheiksyedm
Copy link
Copy Markdown
Contributor

/azp run maui-pr-uitests

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

@kubaflo
Copy link
Copy Markdown
Contributor

kubaflo commented Mar 10, 2026

🤖 AI Summary

📊 Expand Full Review
🔍 Pre-Flight — Context & Validation
📝 Review Sessionupdated the sample · 371d871

PR: #34283 - [Testing] Refactoring Feature Matrix UITest Cases for CheckBox Control
Issue: #34278 - [iOS] Color of the checkBox control is not properly worked on dynamic scenarios
Platforms Affected: iOS, MacCatalyst (issue), plus All platforms (for test refactoring)
Files Changed: 4 implementation/test files + 10 snapshot PNG files

Issue Summary

When CheckBox Color is set to null dynamically on iOS/MacCatalyst, the CheckBox retains the previously applied color instead of reverting to the default color. This is a visual regression on iOS 18 and iOS 26.

PR Type

Testing-only PR - This PR refactors the CheckBox feature matrix test infrastructure and adds new test cases. It does NOT include a production code fix. The test that reproduces the actual bug (CheckBox_VerifyColorAfterReset) is intentionally disabled on iOS/Catalyst with #if TEST_FAILS_ON_IOS && TEST_FAILS_ON_CATALYST.

Files Changed

Implementation/Test files:

  • src/Controls/tests/TestCases.HostApp/FeatureMatrix/CheckBox/CheckBoxViewModel.cs - Renamed from CheckBoxFeatureMatrixViewModel, added Reset(), HasShadow/Shadow properties, moved color logic into ViewModel
  • src/Controls/tests/TestCases.HostApp/FeatureMatrix/CheckBox/CheckBoxControlPage.xaml - Updated bindings for new ViewModel, added shadow toggle, used UITestEntry with IsCursorVisible="False", added color buttons with text/color/width
  • src/Controls/tests/TestCases.HostApp/FeatureMatrix/CheckBox/CheckBoxControlPage.xaml.cs - Simplified code-behind, delegates state to ViewModel via Reset()
  • src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CheckBoxFeatureTests.cs - Added new tests, WaitForElement for stability, shadow test, color after reset (guarded by #if)

Snapshot baselines (10 files): Android, iOS, Mac, modified existing + added new shadow/reset screenshotsWindows

Key Findings

  • All previous review comments (from copilot-pull-request-reviewer) have been marked as resolved by the author:
    fixed
    fixed
    fixed
    fixed (now uses UITestEntry with IsCursorVisible="False")
    fixed

  • Important Design Decision in XAML: IsCheckedSwitch is now bound to IsEnabled="{Binding IsEnabled}", preventing users from changing IsChecked via the Switch when the CheckBox is disabled. This is intentional per comment in XAML.

  • The bug test CheckBox_VerifyColorAfterReset is wrapped in #if TEST_FAILS_ON_IOS && TEST_FAILS_ON_ meaning it's disabled until the actual production fix lands in a separate PR.CATALYST

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #34283 Refactor test infrastructure: rename ViewModel, add Reset(), shadow support, UITestEntry, new test PENDING (Gate) 4 code files + 10 snapshots Testing-only PR cases

🚦 Gate — Test Verification
📝 Review Sessionupdated the sample · 371d871

Result PASSED:
Platform: ios
Mode: Full Verification
Test Filter: CheckBox_VerifyWithShadow

  • Tests FAIL without fix
  • Tests PASS with fix

Note: This is a testing-only PR (refactoring + new test cases). The CheckBox_VerifyWithShadow test is a newly added test in the PR. Without the PR's changes, the test fails (the ViewModel/page structure doesn't support shadow). With the PR's changes, the test passes.


🔧 Fix — Analysis & Comparison
📝 Review Sessionupdated the sample · 371d871

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix (claude-sonnet-4.6) Add in CheckBoxExtensions.cs PASS 2 files (+VisualRegressionTester fix + snapshot) Simplest fix
2 try-fix (claude-opus-4.6) Use via PaintExtensions (single line, no if/else) PASS 2 files + snapshot Elegant, handles all Paint types
3 try-fix (gpt-5.2) Capture default TintColor in MauiCheckBox constructor + method PASS 3 files + snapshot More invasive, adds state to MauiCheckBox
4 try-fix (gpt-5.3-codex) Clear tint in CheckBoxHandler.iOS.cs MapForeground before FAIL 2 files Failed: compile error (missing VisualRegressionTester fallbackEnvironmentName param) UpdateForeground
5 try-fix (gemini-3-pro-preview) Handler approach + compile fix for FAIL 2 files Failed: test run failed (exit code 1) VisualRegressionTester
PR PR #34283 Test infrastructure refactoring no production fix. intentionally disabled on iOS. only PASS (Gate) 4 code files + 10 snapshots Testing-only PR

Cross-Pollination (Round 2)

Model Response
claude-sonnet-4.6 NEW IDEA: Fix CheckBoxTintUIColor getter use TintColor (iOS inherited) instead of hardcoded UIColor.White
claude-opus-4.6 NO NEW IDEAS
gpt-5.2 NEW IDEA: Map CheckBox.Color directly to UIView.TintColor for natural tint inheritance
gpt-5.3-codex NEW IDEA: Recreate MauiCheckBox when Color transitions from non-null to null
gemini-3-pro-preview NEW IDEA: Override MapForeground in handler with explicit null check (variant of attempts 4/5)

No additional try-fix rounds new ideas from models 1, 3, 4 were either too invasive (recreate MauiCheckBox), variants of failed handler approaches, or supplementary improvements (not core fixes). The fix space for the root cause is exhausted with 3 passing candidates.run

Exhausted: all 5 models queried in Round 2; no viable new independent approach remainsYes
Selected Fix: PR's This is a [Testing] refactoring PR by design. The PR author intentionally did NOT include a production fix and instead disabled the failing test with #if TEST_FAILS_ON_IOS. The test infrastructure quality is high (all reviewer comments addressed). The production fix for #34278 should come in a separate PR. Among try-fix alternatives, Attempt 2 (PaintExtensions.ToColor()) is cleanest but does not change the recommendation.fix

Root Cause (for reference)

UpdateForeground in CheckBoxExtensions.cs only handles whenCheckBox.Coloris set tonull, the else/null case is not handled so CheckBoxTintColor is never reset on the platform view, retaining the old color.SolidPaint

Simplest fix (when ready): Replace the conditional with:

platformCheckBox.CheckBoxTintColor = check.Foreground.ToColor();

📋 Report — Final Recommendation
📝 Review Sessionupdated the sample · 371d871

Final Recommendation: APPROVE

Summary

PR #34283 is a well-executed refactoring PR that improves the CheckBox feature matrix test infrastructure. The PR renames the ViewModel, centralizes state in a method, adds shadow support testing, uses for screenshot stability, and adds comprehensive test coverage. All previous reviewer comments have been addressed. Gate PASSED on iOS.

The PR intentionally does NOT fix the production iOS color bug (# the failing test is correctly disabled with #if TEST_FAILS_ON_IOS && TEST_FAILS_ON_CATALYST and a link to the issue. This is an acceptable design pattern (ship test infrastructure before the fix).34278)


Root Cause (Issue #34278, not fixed in this PR)

UpdateForeground in CheckBoxExtensions.cs (iOS) only handles whenCheckBox.Coloris set tonull, the else/null case is not handled so CheckBoxTintColor is never reset on the platform view.SolidPaint

Fix Quality (Test Infrastructure Changes)

Excellent. The refactoring is clean and addresses all reviewer feedback:

  • ViewModel correctly uses INotifyPropertyChanged with Reset() centralizing state
  • UITestEntry with IsCursorVisible="False" for screenshot stability
  • WaitForElement added before all element interactions
  • VerifyScreenshot(tolerance: 0.5, retryTimeout: TimeSpan.FromSeconds(2)) used correctly
  • CheckBox_VerifyColorAfterReset disabled on iOS/Catalyst with issue link comment

PR Finalization (Title & Description)

Title Assessment: Acceptable but could be slightly more descriptive.

  • Current: [Testing] Refactoring Feature Matrix UITest Cases for CheckBox Control
  • Suggested: [Testing] CheckBox: Refactor Feature Matrix tests (ViewModel, shadow, Reset, color tests)

Description Assessment: Moderately detailed. The sections accurately describe the changes.

Missing required NOTE Must be prepended:block

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

Code Review Findings

**

  1. CheckBox_SetAllProperties_VerifyVisualState (Order 15) adds limited value

    • Sets green color, disables CheckBox, taps it, asserts IsCheckedLabel is "True"
    • The assertion "True" is trivially satisfied since IsChecked started at True and tapping disabled doesn't change it
    • Consider adding a screenshot or stronger assertion, or removing if covered by other tests
  2. OnCheckBoxCheckedChanged fires on programmatic IsChecked changes

    • CheckedChanged fires when IsCheckedSwitch toggles the binding, not only direct user taps
    • Tests that use IsCheckedSwitch will incidentally set CheckedChangedStatus
    • This is mitigated by Reset() at the start of each test but worth documenting

** Looks Good**

Shadow property chain in ViewModel is clean

  • IsCheckedSwitch correctly disabled when IsEnabled=false (prevents misleading state)
  • All test orders make sense and tests are independent via Reset()
  • CheckBox_VerifyCheckedChangedEvent correctly verifies the event doesn't fire when disabled
  • Unused removed , unused removed

Note on Production Fix Availability

Try-fix found a one-line production fix for issue #34278 that could optionally be included in this PR or a follow-up:

// In src/Core/src/Platform/iOS/CheckBoxExtensions.cs
public static void UpdateForeground(this MauiCheckBox platformCheckBox, ICheckBox check)
{
    // Replace the if-block with:
    platformCheckBox.CheckBoxTintColor = check.Foreground.ToColor();
    // This handles null Foreground (returns null, resetting tint) and SolidPaint (extracts color)
}

If included, the #if TEST_FAILS_ON_IOS && TEST_FAILS_ON_CATALYST guard should be removed and iOS/Catalyst snapshots added for CheckBox_VerifyColorAfterReset.


📋 Expand PR Finalization Review
Title: ✅ Good

Current: [Testing] Refactoring Feature Matrix UITest Cases for CheckBox Control

Description: ✅ Good

Description needs updates. See details below.

✨ Suggested PR Description

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

This pull request refactors and enhances the CheckBox feature matrix test page and its associated ViewModel. The main changes include renaming and simplifying the ViewModel, adding support for a shadow property on the CheckBox, improving the reset logic, and updating the UI and test constants to match these changes.

ViewModel Refactoring and Enhancement:

  • Renamed CheckBoxFeatureMatrixViewModel to CheckBoxViewModel, moved the color-setting logic into the ViewModel, and added a new Reset() method to centralize state resets. The ViewModel now also exposes a HasShadow property and a corresponding Shadow property, allowing the CheckBox to visually display a shadow when toggled. [1] [2] [3]

UI and Binding Updates:

  • Updated CheckBoxControlPage.xaml to use the new ViewModel name, bind the CheckBox's Shadow property, and add a UI toggle for the shadow feature. The reset button now calls the ViewModel's Reset() method. The color buttons were updated with text, color, and width for clarity. [1] [2] [3]
  • Replaced deprecated StackLayout with VerticalStackLayout/HorizontalStackLayout throughout the page.
  • Replaced Entry with UITestEntry (with IsCursorVisible="False") for the command parameter field to prevent cursor blinking from causing flaky screenshot comparisons.

Logic and Usability Improvements:

  • The Switch controlling IsChecked is now disabled when the CheckBox is disabled, ensuring consistent behavior and preventing user interaction when not allowed.

Test Constants Update:

  • Added new automation IDs and constants in the test file to support the new UI elements (HasShadowCheckBox, color buttons, and command parameter entry).
  • Moved [Category(UITestCategories.CheckBox)] to the class level and added [Test, Order(N)] ordering to all tests.
  • Added 9 new test cases covering shadow rendering, command execution with parameters (checked/unchecked states), event+command simultaneous execution, direct tap toggle, reset verification, and disabled-state checks.

Known Issue (not fixed in this PR):

  • CheckBox_VerifyColorAfterReset is guarded behind #if TEST_FAILS_ON_IOS && TEST_FAILS_ON_CATALYST because on iOS/MacCatalyst the CheckBox color is not properly reset when set back to null dynamically. This test documents the known behavior but is skipped on affected platforms to avoid blocking CI.

Code Cleanup:

  • Removed unused commands and redundant code from the code-behind, delegating all state logic to the ViewModel for a cleaner separation of concerns.
  • Removed the partial class CheckBoxFeatureMatrixViewModel extension from the code-behind file that previously hosted SetColorCommand.

These changes improve maintainability, testability, and feature coverage for the CheckBox control in the test app.

Issues Fixed

Related to #34278 (iOS CheckBox color not properly reset — documented with skipped test, bug not yet fixed)

Code Review: ✅ Passed

Code Review — PR #34283

🟡 Suggestions


1. CheckBox_VerifyCommandWithParameterWhileUnChecked (Order 8) — Implicit Command Behavior

File: src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CheckBoxFeatureTests.cs

Code:

[Test, Order(8)]
public void CheckBox_VerifyCommandWithParameterWhileUnChecked()
{
    App.WaitForElement(ResetButton);
    App.Tap(ResetButton);                          // Reset() → CommandStatus = ""
    App.WaitForElement(CommandParameterEntry);
    App.EnterText(CommandParameterEntry, "TestParameter");
    App.DismissKeyboard();
    App.WaitForElement(IsCheckedSwitch);
    App.Tap(IsCheckedSwitch);                      // Tapping Switch changes IsChecked via binding
    Assert.That(App.FindElement(CommandStatusLabel).GetText(), Is.EqualTo("Command Executed: TestParameter"));
    // ↑ Assertion passes only if MAUI CheckBox fires its Command on programmatic IsChecked changes
    App.WaitForElement(CheckBoxControl);
    App.Tap(CheckBoxControl);
    Assert.That(App.FindElement(CommandStatusLabel).GetText(), Is.EqualTo("Command Executed: TestParameter"));
}

Concern: The first assertion (after App.Tap(IsCheckedSwitch)) succeeds only if MAUI's CheckBox.Command fires when IsChecked is changed via two-way binding from the Switch — i.e., when a programmatic/binding-driven change occurs rather than a direct user tap of the CheckBox. This is non-obvious behavior (most controls only fire Command on direct user interaction).

If this is intentional (verifying that MAUI CheckBox fires Command on any IsChecked change), a brief comment would help future readers understand why the assertion is valid without having to trace the binding chain.

Recommendation: Add a comment explaining the intent:

// Tapping the Switch changes IsChecked via two-way binding.
// MAUI CheckBox fires its Command whenever IsChecked changes, even programmatically.
// This verifies the command fires correctly when the checkbox is unchecked this way.
App.Tap(IsCheckedSwitch);
Assert.That(App.FindElement(CommandStatusLabel).GetText(), Is.EqualTo("Command Executed: TestParameter"));

2. DefaultColorButton Constant is Unused in Tests

File: src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/CheckBoxFeatureTests.cs

Code:

const string DefaultColorButton = "DefaultColorButton";

Concern: DefaultColorButton is declared as a constant but is not used in any test method. The CheckBox_VerifyColorAfterReset test (which would logically use it to set then reset color) uses GreenColorButton + ResetButton (via ViewModel.Reset()) instead. The DefaultColorButton exists in the UI (calling SetColorCommand with null parameter → Color = null) but isn't exercised.

Recommendation: Either add a test that uses DefaultColorButton to verify that clicking "Default" resets color, or remove the unused constant.


3. Verbose Explanatory Comment in XAML

File: src/Controls/tests/TestCases.HostApp/FeatureMatrix/CheckBox/CheckBoxControlPage.xaml

Code:

<!-- This change is intentional. When IsEnabled is set to false, the CheckBox should not update IsChecked if the user taps it. To maintain consistent behavior, I also disabled the IsChecked Switch -->
<VerticalStackLayout>
    <HorizontalStackLayout >
        <Label Text="IsChecked" .../>
        <Switch IsToggled="{Binding IsChecked}"
                IsEnabled="{Binding IsEnabled}"
                AutomationId="IsCheckedSwitch"/>
    </HorizontalStackLayout>

Concern: A lengthy explanatory comment in XAML about implementation rationale is not idiomatic. XAML comments are preserved in source but can't be easily found by future developers. This kind of note is better suited for a commit message or PR description.

Recommendation: Shorten to a brief one-liner or remove entirely since the IsEnabled="{Binding IsEnabled}" binding is self-documenting:

<!-- IsChecked Switch is disabled when CheckBox is disabled (consistent UX) -->

✅ Looks Good

  • ViewModel cleanup: Moving SetColorCommand into the ViewModel (removing the partial class extension in code-behind) is a clear improvement in separation of concerns.
  • Reset() method: Correctly resets all state, including HasShadow (which cascades to set Shadow = null via the property chain). The indirect reset of IsEventStatusLabelVisible / IsCommandStatusLabelVisible through the status string setters is clever and correct.
  • HasShadow/Shadow property chain: Well-implemented — HasShadow setter creates/clears the Shadow object and fires OnPropertyChanged for itself; Shadow setter fires its own OnPropertyChanged separately. Both bindings will update correctly.
  • StackLayoutVerticalStackLayout/HorizontalStackLayout: Good improvement, avoids deprecated layout type.
  • UITestEntry with IsCursorVisible="False": Correctly follows the pattern for screenshot-stable text input controls.
  • [Category] at class level: Cleaner than per-test attributes; correct per repo conventions.
  • #if TEST_FAILS_ON_IOS && TEST_FAILS_ON_CATALYST guard: Appropriate way to document a known platform bug without blocking CI. Issue [iOS] Color of the checkBox control is not properly worked on dynamic scenarios #34278 is correctly referenced in the test comment.
  • Simplified null-check logic: IsEventStatusLabelVisible = !string.IsNullOrEmpty(value) is cleaner than the previous if (!string.IsNullOrEmpty(value)) { IsEventStatusLabelVisible = true; } (the old code never set it back to false!). This is actually a bug fix bundled in the cleanup.
  • OnSetColor(null) handling: The XAML DefaultColorButton passes no CommandParameter (null), which hits the _ => null branch in the switch expression → Color = null. Correct behavior.

@kubaflo kubaflo added s/agent-approved AI agent recommends approval - PR fix is correct and optimal s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Mar 10, 2026
@kubaflo kubaflo changed the base branch from main to inflight/current March 10, 2026 12:12
@kubaflo kubaflo merged commit 6d7d838 into dotnet:inflight/current Mar 10, 2026
143 of 152 checks passed
PureWeen pushed a commit that referenced this pull request Mar 11, 2026
#34283)

This pull request refactors and enhances the CheckBox feature matrix
test page and its associated ViewModel. The main changes include
renaming and simplifying the ViewModel, adding support for a shadow
property on the CheckBox, improving the reset logic, and updating the UI
and test constants to match these changes.

**ViewModel Refactoring and Enhancement:**
* Renamed `CheckBoxFeatureMatrixViewModel` to `CheckBoxViewModel`, moved
the color-setting logic into the ViewModel, and added a new `Reset()`
method to centralize state resets. The ViewModel now also exposes a
`HasShadow` property and a corresponding `Shadow` property, allowing the
CheckBox to visually display a shadow when toggled.
[[1]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R5-R18)
[[2]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4L23-R31)
[[3]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R184-R236)

**UI and Binding Updates:**
* Updated `CheckBoxControlPage.xaml` to use the new ViewModel name, bind
the CheckBox's `Shadow` property, and add a UI toggle for the shadow
feature. The reset button now calls the ViewModel's `Reset()` method.
The color buttons were updated with text, color, and width for clarity.
[[1]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL6-R6)
[[2]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL15-R23)
[[3]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL125-R178)

**Logic and Usability Improvements:**
* The Switch controlling `IsChecked` is now disabled when the CheckBox
is disabled, ensuring consistent behavior and preventing user
interaction when not allowed.

**Test Constants Update:**
* Added new automation IDs and constants in the test file to support the
new UI elements (`HasShadowCheckBox`, color buttons, and command
parameter entry).

**Code Cleanup:**
* Removed unused commands and redundant code from the code-behind,
delegating all state logic to the ViewModel for a cleaner separation of
concerns.

These changes improve maintainability, testability, and feature coverage
for the CheckBox control in the test app.

**Issues Identified**

- #34278
github-actions bot pushed a commit that referenced this pull request Mar 11, 2026
#34283)

This pull request refactors and enhances the CheckBox feature matrix
test page and its associated ViewModel. The main changes include
renaming and simplifying the ViewModel, adding support for a shadow
property on the CheckBox, improving the reset logic, and updating the UI
and test constants to match these changes.

**ViewModel Refactoring and Enhancement:**
* Renamed `CheckBoxFeatureMatrixViewModel` to `CheckBoxViewModel`, moved
the color-setting logic into the ViewModel, and added a new `Reset()`
method to centralize state resets. The ViewModel now also exposes a
`HasShadow` property and a corresponding `Shadow` property, allowing the
CheckBox to visually display a shadow when toggled.
[[1]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R5-R18)
[[2]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4L23-R31)
[[3]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R184-R236)

**UI and Binding Updates:**
* Updated `CheckBoxControlPage.xaml` to use the new ViewModel name, bind
the CheckBox's `Shadow` property, and add a UI toggle for the shadow
feature. The reset button now calls the ViewModel's `Reset()` method.
The color buttons were updated with text, color, and width for clarity.
[[1]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL6-R6)
[[2]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL15-R23)
[[3]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL125-R178)

**Logic and Usability Improvements:**
* The Switch controlling `IsChecked` is now disabled when the CheckBox
is disabled, ensuring consistent behavior and preventing user
interaction when not allowed.

**Test Constants Update:**
* Added new automation IDs and constants in the test file to support the
new UI elements (`HasShadowCheckBox`, color buttons, and command
parameter entry).

**Code Cleanup:**
* Removed unused commands and redundant code from the code-behind,
delegating all state logic to the ViewModel for a cleaner separation of
concerns.

These changes improve maintainability, testability, and feature coverage
for the CheckBox control in the test app.

**Issues Identified**

- #34278
@PureWeen PureWeen mentioned this pull request Mar 17, 2026
PureWeen pushed a commit that referenced this pull request Mar 19, 2026
#34283)

This pull request refactors and enhances the CheckBox feature matrix
test page and its associated ViewModel. The main changes include
renaming and simplifying the ViewModel, adding support for a shadow
property on the CheckBox, improving the reset logic, and updating the UI
and test constants to match these changes.

**ViewModel Refactoring and Enhancement:**
* Renamed `CheckBoxFeatureMatrixViewModel` to `CheckBoxViewModel`, moved
the color-setting logic into the ViewModel, and added a new `Reset()`
method to centralize state resets. The ViewModel now also exposes a
`HasShadow` property and a corresponding `Shadow` property, allowing the
CheckBox to visually display a shadow when toggled.
[[1]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R5-R18)
[[2]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4L23-R31)
[[3]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R184-R236)

**UI and Binding Updates:**
* Updated `CheckBoxControlPage.xaml` to use the new ViewModel name, bind
the CheckBox's `Shadow` property, and add a UI toggle for the shadow
feature. The reset button now calls the ViewModel's `Reset()` method.
The color buttons were updated with text, color, and width for clarity.
[[1]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL6-R6)
[[2]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL15-R23)
[[3]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL125-R178)

**Logic and Usability Improvements:**
* The Switch controlling `IsChecked` is now disabled when the CheckBox
is disabled, ensuring consistent behavior and preventing user
interaction when not allowed.

**Test Constants Update:**
* Added new automation IDs and constants in the test file to support the
new UI elements (`HasShadowCheckBox`, color buttons, and command
parameter entry).

**Code Cleanup:**
* Removed unused commands and redundant code from the code-behind,
delegating all state logic to the ViewModel for a cleaner separation of
concerns.

These changes improve maintainability, testability, and feature coverage
for the CheckBox control in the test app.

**Issues Identified**

- #34278
github-actions bot pushed a commit that referenced this pull request Mar 20, 2026
#34283)

This pull request refactors and enhances the CheckBox feature matrix
test page and its associated ViewModel. The main changes include
renaming and simplifying the ViewModel, adding support for a shadow
property on the CheckBox, improving the reset logic, and updating the UI
and test constants to match these changes.

**ViewModel Refactoring and Enhancement:**
* Renamed `CheckBoxFeatureMatrixViewModel` to `CheckBoxViewModel`, moved
the color-setting logic into the ViewModel, and added a new `Reset()`
method to centralize state resets. The ViewModel now also exposes a
`HasShadow` property and a corresponding `Shadow` property, allowing the
CheckBox to visually display a shadow when toggled.
[[1]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R5-R18)
[[2]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4L23-R31)
[[3]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R184-R236)

**UI and Binding Updates:**
* Updated `CheckBoxControlPage.xaml` to use the new ViewModel name, bind
the CheckBox's `Shadow` property, and add a UI toggle for the shadow
feature. The reset button now calls the ViewModel's `Reset()` method.
The color buttons were updated with text, color, and width for clarity.
[[1]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL6-R6)
[[2]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL15-R23)
[[3]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL125-R178)

**Logic and Usability Improvements:**
* The Switch controlling `IsChecked` is now disabled when the CheckBox
is disabled, ensuring consistent behavior and preventing user
interaction when not allowed.

**Test Constants Update:**
* Added new automation IDs and constants in the test file to support the
new UI elements (`HasShadowCheckBox`, color buttons, and command
parameter entry).

**Code Cleanup:**
* Removed unused commands and redundant code from the code-behind,
delegating all state logic to the ViewModel for a cleaner separation of
concerns.

These changes improve maintainability, testability, and feature coverage
for the CheckBox control in the test app.

**Issues Identified**

- #34278
github-actions bot pushed a commit that referenced this pull request Mar 22, 2026
#34283)

This pull request refactors and enhances the CheckBox feature matrix
test page and its associated ViewModel. The main changes include
renaming and simplifying the ViewModel, adding support for a shadow
property on the CheckBox, improving the reset logic, and updating the UI
and test constants to match these changes.

**ViewModel Refactoring and Enhancement:**
* Renamed `CheckBoxFeatureMatrixViewModel` to `CheckBoxViewModel`, moved
the color-setting logic into the ViewModel, and added a new `Reset()`
method to centralize state resets. The ViewModel now also exposes a
`HasShadow` property and a corresponding `Shadow` property, allowing the
CheckBox to visually display a shadow when toggled.
[[1]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R5-R18)
[[2]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4L23-R31)
[[3]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R184-R236)

**UI and Binding Updates:**
* Updated `CheckBoxControlPage.xaml` to use the new ViewModel name, bind
the CheckBox's `Shadow` property, and add a UI toggle for the shadow
feature. The reset button now calls the ViewModel's `Reset()` method.
The color buttons were updated with text, color, and width for clarity.
[[1]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL6-R6)
[[2]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL15-R23)
[[3]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL125-R178)

**Logic and Usability Improvements:**
* The Switch controlling `IsChecked` is now disabled when the CheckBox
is disabled, ensuring consistent behavior and preventing user
interaction when not allowed.

**Test Constants Update:**
* Added new automation IDs and constants in the test file to support the
new UI elements (`HasShadowCheckBox`, color buttons, and command
parameter entry).

**Code Cleanup:**
* Removed unused commands and redundant code from the code-behind,
delegating all state logic to the ViewModel for a cleaner separation of
concerns.

These changes improve maintainability, testability, and feature coverage
for the CheckBox control in the test app.

**Issues Identified**

- #34278
PureWeen added a commit that referenced this pull request Mar 24, 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 66 commits with various improvements,
bug fixes, and enhancements.


## Activityindicator
- [Android] Implemented material3 support for ActivityIndicator by
@Dhivya-SF4094 in #33481
  <details>
  <summary>🔧 Fixes</summary>

- [Implement material3 support for
ActivityIndicator](#33479)
  </details>

- [iOS] Fix: ActivityIndicator IsRunning ignores IsVisible when set to
true by @bhavanesh2001 in #28983
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] [ActivityIndicator] `IsRunning` ignores `IsVisible` when set to
`true`](#28968)
  </details>

## Button
- [iOS] Button RTL text and image overlap - fix by @kubaflo in
#29041

## Checkbox
- [iOS/MacCatalyst] Fix CheckBox foreground color not resetting when set
to null by @Ahamed-Ali in #34284
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Color of the checkBox control is not properly worked on dynamic
scenarios](#34278)
  </details>

## CollectionView
- [iOS] Fix: CollectionView does not clear selection when SelectedItem
is set to null by @Tamilarasan-Paranthaman in
#30420
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView not being able to remove selected item highlight on
iOS](#30363)
- [[MAUI] Select items traces are
preserved](#26187)
  </details>

- [iOS] CV2 ItemsLayout update by @kubaflo in
#28675
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView CollectionViewHandler2 doesnt change ItemsLayout on
DataTrigger](#28656)
- [iOS CollectionView doesn't respect a change to ItemsLayout when using
Items2.CollectionViewHandler2](#31259)
  </details>

- [iOS][CV2] Fix CollectionView renders large empty space at bottom of
view by @devanathan-vaithiyanathan in
#31215
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] [MacCatalyst] CollectionView renders large empty space at
bottom of view](#17799)
- [[iOS/Mac] CollectionView2 EmptyView takes up large horizontal space
even when the content is
small](#33201)
  </details>

- [iOS] Fixed issue where group Header/Footer template was set to all
items when IsGrouped was true for an ObservableCollection by
@Tamilarasan-Paranthaman in #29144
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Group Header/Footer Repeated for All Items When IsGrouped is
True for ObservableCollection in
CollectionView](#29141)
  </details>

- [Android] Fix CollectionView selection crash with HeaderTemplate by
@NirmalKumarYuvaraj in #34275
  <details>
  <summary>🔧 Fixes</summary>

- [[Bug] [Android] System.ArgumentOutOfRangeException: Index was out of
range. Must be non-negative and less than the size of the collection.
Parameter name: index](#34247)
  </details>

## DateTimePicker
- [iOS] Fix TimePicker AM/PM frequently changes when the app is closed
and reopened by @devanathan-vaithiyanathan in
#31066
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] TimePicker AM/PM frequently changes when the app is closed and
reopened](#30837)
- [Maui 10 iOS TimePicker Strange Characters in place of
AM/PM](#33722)
  </details>

- Android TimePicker ignores 24 hour system setting when using Format
Property - fix by @kubaflo in #28797
  <details>
  <summary>🔧 Fixes</summary>

- [Android TimePicker ignores 24 hour system setting when using Format
Property](#28784)
  </details>

## Drawing
- [iOS, Mac, Windows] GraphicsView: Fix Background/BackgroundColor not
updating by @NirmalKumarYuvaraj in
#31254
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Mac, Windows] GraphicsView does not change the
Background/BackgroundColor](#31239)
  </details>

- [iOS] GraphicsView DrawString - fix by @kubaflo in
#26304
  <details>
  <summary>🔧 Fixes</summary>

- [DrawString not rendering in
iOS.](#24450)
- [GraphicsView DrawString not rendering in
iOS](#8486)
- [DrawString doesn't work on
maccatalyst](#4993)
  </details>

- [Android] - Fix Shadow Rendering For Transparent Fill, Stroke (Lines),
and Text on Shapes by @prakashKannanSf3972 in
#29528
  <details>
  <summary>🔧 Fixes</summary>

- [Ellipse Transparency Not Rendered When Drawing Arc Inside the Ellipse
Using GraphicsView on
Android](#29394)
  </details>

- Revert "[iOS, Mac, Windows] GraphicsView: Fix
Background/BackgroundColor not updating (#31254)" by @Ahamed-Ali via
@Copilot in #34508

## Entry
- [iOS 26] Fix Entry MaxLength not enforced due to new multi-range
delegate by @kubaflo in #32045
  <details>
  <summary>🔧 Fixes</summary>

- [iOS 26 - The MaxLength property value is not respected on an Entry
control.](#32016)
- [.NET MAUI Entry Maximum Length not working on iOS and
macOS](#33316)
  </details>

- [iOS] Fixed Entry with IsPassword toggling loses previously entered
text by @SubhikshaSf4851 in #30572
  <details>
  <summary>🔧 Fixes</summary>

- [Entry with IsPassword toggling loses previously entered text on iOS
when IsPassword is
re-enabled](#30085)
  </details>

## Essentials
- Fix for FilePicker PickMultipleAsync nullable reference type by
@SuthiYuvaraj in #33163
  <details>
  <summary>🔧 Fixes</summary>

- [FilePicker PickMultipleAsync nullable reference
type](#33114)
  </details>

- Replace deprecated NetworkReachability with NWPathMonitor on iOS/macOS
by @jfversluis via @Copilot in #32354
  <details>
  <summary>🔧 Fixes</summary>

- [NetworkReachability is obsolete on iOS/maccatalyst
17.4+](#32312)
- [Use NWPathMonitor on iOS for Essentials
Connectivity](#2574)
  </details>

## Essentials Connectivity
- Update Android Connectivity implementation to use modern APIs by
@jfversluis via @Copilot in #30348
  <details>
  <summary>🔧 Fixes</summary>

- [Update the Android Connectivity implementation to user modern
APIs](#30347)
  </details>

## Flyout
- [iOS] Fixed Flyout icon not updating when root page changes using
InsertPageBefore by @Vignesh-SF3580 in
#29924
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Flyout icon not replaced by back button when root page is
changed using
InsertPageBefore](#29921)
  </details>

## Flyoutpage
- [iOS] Flyout Items Not Displayed in RightToLeft FlowDirection in
Landscape - fix by @kubaflo in #26762
  <details>
  <summary>🔧 Fixes</summary>

- [Flyout Items Not Displayed in RightToLeft FlowDirection on iOS in
Landscape Orientation and Hamburger Icon Positioned
Incorrectly](#26726)
  </details>

## Image
- [Android] Implemented Material3 support for Image by @Dhivya-SF4094 in
#33661
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
Image](#33660)
  </details>

## Keyboard
- [iOS] Fix gap at top of view after rotating device while Entry
keyboard is visible by @praveenkumarkarunanithi in
#34328
  <details>
  <summary>🔧 Fixes</summary>

- [Focusing and entering texts on entry control causes a gap at the top
after rotating simulator.](#33407)
  </details>

## Label
- [Android] Support for images inside HTML label by @kubaflo in
#21679
  <details>
  <summary>🔧 Fixes</summary>

- [Label with HTML TextType does not display images on
Android](#21044)
  </details>

- [fix] ContentLabel Moved to a nested class to prevent CS0122 in
external source generators by @SubhikshaSf4851 in
#34514
  <details>
  <summary>🔧 Fixes</summary>

- [[MAUI] Building Maui App with sample content results CS0122
errors.](#34512)
  </details>

## Layout
- Optimize ordering of children in Flex layout by @symbiogenesis in
#21961

- [Android] Fix control size properties not available during Loaded
event by @Vignesh-SF3580 in #31590
  <details>
  <summary>🔧 Fixes</summary>

- [CollectionView on Android does not provide height, width, logical
children once loaded, works fine on
Windows](#14364)
- [Control's Loaded event invokes before calling its measure override
method.](#14160)
  </details>

## Mediapicker
- [iOS/Android] MediaPicker: Fix image orientation when RotateImage=true
by @michalpobuta in #33892
  <details>
  <summary>🔧 Fixes</summary>

- [MediaPicker.PickPhotosAsync does not preserve image
orientation](#32650)
  </details>

## Modal
- [Windows] Fix modal page keyboard focus not shifting to newly opened
modal by @jfversluis in #34212
  <details>
  <summary>🔧 Fixes</summary>

- [Keyboard focus does not shift to a newly opened modal page: Pressing
enter clicks the button on the page beneath the modal
page](#22938)
  </details>

## Navigation
- [iOS26] Apply view margins in title view by @kubaflo in
#32205
  <details>
  <summary>🔧 Fixes</summary>

- [NavigationPage TitleView iOS
26](#32200)
  </details>

- [iOS] System.NullReferenceException at
NavigationRenderer.SetStatusBarStyle() by @kubaflo in
#29564
  <details>
  <summary>🔧 Fixes</summary>

- [System.NullReferenceException at
NavigationRenderer.SetStatusBarStyle()](#29535)
  </details>

- [iOS 26] Fix back button color not applied for NavigationPage by
@Shalini-Ashokan in #34326
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Color not applied to the Back button text or image on iOS
26](#33966)
  </details>

## Picker
- Fix Picker layout on Mac Catalyst 26+ by @kubaflo in
#33146
  <details>
  <summary>🔧 Fixes</summary>

- [[MacOS 26] Text on picker options are not centered on macOS
26.1](#33229)
  </details>

## Progressbar
- [Android] Implemented Material3 support for ProgressBar by
@SyedAbdulAzeemSF4852 in #33926
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
Progressbar](#33925)
  </details>

## RadioButton
- [iOS, Mac] Fix for RadioButton TextColor for plain Content not working
by @HarishwaranVijayakumar in #31940
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButton: TextColor for plain Content not working on
iOS](#18011)
  </details>

- [All Platforms] Fix RadioButton warning when ControlTemplate is set
with View content by @kubaflo in
#33839
  <details>
  <summary>🔧 Fixes</summary>

- [Seeking clarification on RadioButton + ControlTemplate + Content
documentation](#33829)
  </details>

- Visual state change for disabled RadioButton by @kubaflo in
#23471
  <details>
  <summary>🔧 Fixes</summary>

- [RadioButton disabled UI issue -
iOS](#18668)
  </details>

## SafeArea
- [Android] Fix for TabbedPage BottomNavigation BarBackgroundColor not
extending to system navigation bar by @praveenkumarkarunanithi in
#33428
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] TabbedPage BottomNavigation BarBackgroundColor does not
extend to system navigation bar area in Edge-to-Edge
mode](#33344)
  </details>

## ScrollView
- [Android] ScrollView: Fix HorizontalScrollBarVisibility not updating
immediately at runtime by @SubhikshaSf4851 in
#33528
  <details>
  <summary>🔧 Fixes</summary>

- [Runtime Scrollbar visibility not updating correctly on Android and
macOS platforms.](#33400)
  </details>

- Fixed crash when calling ItemsView.ScrollTo on unloaded CollectionView
by @kubaflo in #25444
  <details>
  <summary>🔧 Fixes</summary>

- [App crashes when calling ItemsView.ScrollTo on unloaded
CollectionView](#23014)
  </details>

## Shell
- [Shell] Update logic for iOS large title display in ShellItemRenderer
by @kubaflo in #33246

- [iOS][Shell] Fix navigation lifecycle and back button for More tab (>5
tabs) by @kubaflo in #27932
  <details>
  <summary>🔧 Fixes</summary>

- [OnAppearing and OnNavigatedTo does not work when using extended
Tabbar (tabbar with more than 5 tabs) on
IOS.](#27799)
- [Shell.BackButtonBehavior does not work when using extended Tabbar
(tabbar with more than 5 tabs)on
IOS.](#27800)
- [Shell TabBar More button causes ViewModel command binding
disconnection on back
navigation](#30862)
- [Content page onappearing not firing if tabs are on the more tab on
IOS](#31166)
  </details>

- [iOS 26] Fix tab bar ghosting when navigating from modal to tabbed
Shell content by @SubhikshaSf4851 in
#34254
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Tab bar ghosting issue on iOS 26 (liquid
glass)](#34143)
  </details>

- Fix for Shell tab visibility not updating when navigating back
multiple pages by @BagavathiPerumal in
#34403
  <details>
  <summary>🔧 Fixes</summary>

- [Changing Shell Tab Visibility when navigating back multiple pages
ignores Shell Tab
Visibility](#33351)
  </details>

- [iOS/Mac] Fixed OnBackButtonPressed not firing for Shell Navigation
Bar Button by @Dhivya-SF4094 in
#34401
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] OnBackButtonPressed not firing for Shell Navigation Bar
button](#34190)
  </details>

## Slider
- [iOS] Fix for Slider ThumbImageSource is not centered properly on iOS
26 by @HarishwaranVijayakumar in
#34019
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] Slider ThumbImageSource is not centered
properly](#33967)
  </details>

- [Android] Fix improper rendering of ThumbimageSource in Slider by
@NirmalKumarYuvaraj in #34064
  <details>
  <summary>🔧 Fixes</summary>

- [[Slider] MAUI Slider thumb image is big on
android](#13258)
  </details>

## Stepper
- [iOS] Fix Stepper layout overlap in landscape on iOS 26 by
@Vignesh-SF3580 in #34325
  <details>
  <summary>🔧 Fixes</summary>

- [[.NET10] D10 - Customize cursor position - Rotating simulator makes
the button and label
overlap](#34273)
  </details>

## SwipeView
- [iOS] SwipeView: Honor FontImageSource.Color in SwipeItem icon by
@kubaflo in #27389
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] SwipeView: SwipeItem.IconImageSource.FontImageSource color
value not honored](#27377)
  </details>

## Switch
- [Android] Fix Switch thumb shadow missing when ThumbColor is set by
@Shalini-Ashokan in #33960
  <details>
  <summary>🔧 Fixes</summary>

- [Android Switch Control Thumb
Shadow](#19676)
  </details>

## Toolbar
- [iOS/Mac Catalyst 26] Fix Shell.ForegroundColor not applied to
ToolbarItems by @SyedAbdulAzeemSF4852 in
#34085
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS26] Shell.ForegroundColor is not applied to
ToolbarItems](#34083)
  </details>

- [Android] VoiceOver on Toolbar Item by @kubaflo in
#29596
  <details>
  <summary>🔧 Fixes</summary>

- [VoiceOver on Toolbar
Item](#29573)
- [SemanticProperties do not work on
ToolbarItems](#23623)
  </details>


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

- [Testing] Additional Feature Matrix Test Cases for CollectionView by
@TamilarasanSF4853 in #32432
- [Testing] Feature Matrix UITest Cases for VisualStateManager by
@LogishaSelvarajSF4525 in #34146
- [Testing] Feature Matrix UITest Cases for Clip by @TamilarasanSF4853
in #34121
- [Testing] Feature matrix UITest Cases for Map Control by
@HarishKumarSF4517 in #31656
- [Testing] Feature matrix UITest Cases for Visual Transform Control by
@HarishKumarSF4517 in #32799
- [Testing] Feature Matrix UITest Cases for Shell Pages by
@NafeelaNazhir in #33945
- [Testing] Feature Matrix UITest Cases for Triggers by
@HarishKumarSF4517 in #34152
- [Testing] Refactoring Feature Matrix UITest Cases for CheckBox Control
by @LogishaSelvarajSF4525 in #34283
- Resolve UI test Build Sample failures - Candidate March 16 by
@Ahamed-Ali in #34442
- Fix the failures in the Candidate branch- March 16 by @Ahamed-Ali in
#34453
  <details>
  <summary>🔧 Fixes</summary>

  - [March 16th, Candidate](#34437)
  </details>
- Fixed the iOS 18.5 Candidate failures (March 16,2026) by @Ahamed-Ali
in #34593
  <details>
  <summary>🔧 Fixes</summary>

  - [March 16th, Candidate](#34437)
  </details>

</details>

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

- Fixed candidate test failures caused by PR #33428. by @Ahamed-Ali in
#34515
  <details>
  <summary>🔧 Fixes</summary>

- [[.NET10] On Android, there's a big space at the top for I, M and N2 &
N3](#34509)
  </details>
- Revert "[iOS] Button RTL text and image overlap - fix (#29041)" in
b0497af

</details>

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

Fixes #2574, Fixes #4993, Fixes #8486, Fixes #13258, Fixes #14160, Fixes
#14364, Fixes #17799, Fixes #18011, Fixes #18668, Fixes #19676, Fixes
#21044, Fixes #22938, Fixes #23014, Fixes #23623, Fixes #24450, Fixes
#26187, Fixes #26726, Fixes #27377, Fixes #27799, Fixes #27800, Fixes
#28656, Fixes #28784, Fixes #28968, Fixes #29141, Fixes #29394, Fixes
#29535, Fixes #29573, Fixes #29921, Fixes #30085, Fixes #30347, Fixes
#30363, Fixes #30837, Fixes #30862, Fixes #31166, Fixes #31239, Fixes
#31259, Fixes #32016, Fixes #32200, Fixes #32312, Fixes #32650, Fixes
#33114, Fixes #33201, Fixes #33229, Fixes #33316, Fixes #33344, Fixes
#33351, Fixes #33400, Fixes #33407, Fixes #33479, Fixes #33660, Fixes
#33722, Fixes #33829, Fixes #33925, Fixes #33966, Fixes #33967, Fixes
#34083, Fixes #34143, Fixes #34190, Fixes #34247, Fixes #34273, Fixes
#34278, Fixes #34437, Fixes #34509, Fixes #34512

</details>

**Full Changelog**:
main...inflight/candidate
KarthikRajaKalaimani pushed a commit to KarthikRajaKalaimani/maui that referenced this pull request Mar 30, 2026
dotnet#34283)

This pull request refactors and enhances the CheckBox feature matrix
test page and its associated ViewModel. The main changes include
renaming and simplifying the ViewModel, adding support for a shadow
property on the CheckBox, improving the reset logic, and updating the UI
and test constants to match these changes.

**ViewModel Refactoring and Enhancement:**
* Renamed `CheckBoxFeatureMatrixViewModel` to `CheckBoxViewModel`, moved
the color-setting logic into the ViewModel, and added a new `Reset()`
method to centralize state resets. The ViewModel now also exposes a
`HasShadow` property and a corresponding `Shadow` property, allowing the
CheckBox to visually display a shadow when toggled.
[[1]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R5-R18)
[[2]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4L23-R31)
[[3]](diffhunk://#diff-b3567be1cf8b17356d0ebab09fdae631b46d1ca3d7f303609471dfe87f5fdcb4R184-R236)

**UI and Binding Updates:**
* Updated `CheckBoxControlPage.xaml` to use the new ViewModel name, bind
the CheckBox's `Shadow` property, and add a UI toggle for the shadow
feature. The reset button now calls the ViewModel's `Reset()` method.
The color buttons were updated with text, color, and width for clarity.
[[1]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL6-R6)
[[2]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL15-R23)
[[3]](diffhunk://#diff-a03dd4b7dc0f8ff638104eae7b61cf5e75341e6941360bcec2caf6be1df9f06eL125-R178)

**Logic and Usability Improvements:**
* The Switch controlling `IsChecked` is now disabled when the CheckBox
is disabled, ensuring consistent behavior and preventing user
interaction when not allowed.

**Test Constants Update:**
* Added new automation IDs and constants in the test file to support the
new UI elements (`HasShadowCheckBox`, color buttons, and command
parameter entry).

**Code Cleanup:**
* Removed unused commands and redundant code from the code-behind,
delegating all state logic to the ViewModel for a cleaner separation of
concerns.

These changes improve maintainability, testability, and feature coverage
for the CheckBox control in the test app.

**Issues Identified**

- dotnet#34278
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-testing Unit tests, device tests community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration s/agent-approved AI agent recommends approval - PR fix is correct and optimal 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.

5 participants