Skip to content

[Android] Implemented material3 support for Button#33173

Merged
jfversluis merged 6 commits intodotnet:inflight/currentfrom
Dhivya-SF4094:material_Button
Feb 27, 2026
Merged

[Android] Implemented material3 support for Button#33173
jfversluis merged 6 commits intodotnet:inflight/currentfrom
Dhivya-SF4094:material_Button

Conversation

@Dhivya-SF4094
Copy link
Copy Markdown
Contributor

@Dhivya-SF4094 Dhivya-SF4094 commented Dec 16, 2025

Note

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

Description of Change

This pull request adds support for Material 3 styling for the Button control on Android in .NET MAUI. It introduces runtime feature toggling for Material 3, configures the necessary Android resources and theming infrastructure, and applies Material 3 styling to Button controls.

Material 3 Button support and theming:

  • Added MauiMaterialButton style, which extends Widget.Material3.Button and applies Material 3 design to MAUI buttons. This style removes Android Material 3 default constraints (minWidth, minHeight, padding, insets) to allow full MAUI control over button sizing and layout, and sets iconSize to 0dp for proper icon sizing.[1]

  • Integrated MauiMaterialButton into Material 3 base theme by setting materialButtonStyle attribute to reference the custom button style, ensuring all buttons automatically receive Material 3 styling when the feature is enabled. [1]

Fixes #33172

Screenshots

Material Design Spec - Button

Material 2  Material 3 
   

@dotnet-policy-service dotnet-policy-service bot added the partner/syncfusion Issues / PR's with Syncfusion collaboration label Dec 16, 2025
<item name="android:windowSplashScreenAnimatedIcon">@drawable/maui_splash</item>
</style>

<style name="MauiMaterialButton" parent="Widget.Material3.Button">
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Actual Change for Button

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 implements Material 3 design system support for Button controls on Android in .NET MAUI. It introduces a runtime feature flag to toggle between Material 2 and Material 3 styling, with Material 2 remaining the default. The implementation includes comprehensive Material 3 color palettes, custom button styling that removes Android's default constraints to maintain MAUI's layout control, and integration with the MSBuild system for configuration.

Key Changes:

  • Added IsMaterial3Enabled runtime feature flag (defaults to false) with MSBuild property support via UseMaterial3
  • Created Material 3 theme resources including complete light/dark color tokens and button styles
  • Modified theme wrapper and corner radius logic to conditionally apply Material 3 styling

Reviewed changes

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

Show a summary per file
File Description
RuntimeFeature.cs Adds IsMaterial3Enabled feature flag with app context switch support
styles-material3.xml Defines Material 3 themes and custom MauiMaterialButton style with zero padding/insets
colors-material3.xml Adds comprehensive Material 3 color token palettes for light and dark themes
MauiRippleDrawableExtensions.cs Updates corner radius defaults to use Material 3 value (20dp) when feature is enabled
MauiMaterialContextThemeWrapper.cs Selects Material 3 or Material 2 base theme based on feature flag
Microsoft.Maui.Controls.targets Configures runtime host option to read UseMaterial3 MSBuild property

<item name="android:paddingRight">0dp</item>
<item name="android:paddingTop">0dp</item>
<item name="android:paddingBottom">0dp</item>
<!-- insets are the amount of space btween the actual color and the edge of the view frame -->
Copy link

Copilot AI Dec 16, 2025

Choose a reason for hiding this comment

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

Corrected spelling of 'btween' to 'between'.

Suggested change
<!-- insets are the amount of space btween the actual color and the edge of the view frame -->
<!-- insets are the amount of space between the actual color and the edge of the view frame -->

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

@StephaneDelcroix StephaneDelcroix left a comment

Choose a reason for hiding this comment

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

✅ Approved

This PR correctly implements Material 3 support for the Button control on Android.

Validation Performed

  • ✅ Tested on Android emulator with UseMaterial3=true
  • ✅ All button variants display with Material 3 styling (20dp rounded corners, M3 color scheme)
  • ✅ Buttons are fully functional and clickable
  • ✅ Code review completed - follows existing patterns

Code Review Summary

  • Feature flag: Correctly follows RuntimeFeature pattern with IsMaterial3Enabled
  • Non-breaking: Opt-in with default false - existing apps unaffected
  • Material 3 spec compliant: 20dp corner radius matches M3 "full" shape spec
  • Theme architecture: Clean conditional theme selection in MauiMaterialContextThemeWrapper

Minor Suggestions (Non-blocking)

  1. Consider using NET9_0_OR_GREATER instead of NET10_0_OR_GREATER for the FeatureSwitchDefinition attribute (for consistency with other feature flags)
  2. Add trailing newline to styles-material3.xml
  3. Document the UseMaterial3 MSBuild property

Great foundational work for Material 3 support in MAUI! 🎉

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

@rmarinho
Copy link
Copy Markdown
Member

rmarinho commented Feb 17, 2026

🤖 AI Summary

📊 Expand Full Review
🔍 Pre-Flight — Context & Validation
📝 Review SessionRemoved Color-material3 · e649867

Issue: #33172 - Implement Material3 support for Button
Platforms Affected: Android only
Files Changed: 2 implementation files, 0 test files

Issue Summary

When the UseMaterial3 MSBuild property is enabled, the Button control should adopt Material 3 visual design. The current implementation does not reflect Material 3 behavior, including updated colors, shapes, elevation, and state behaviors.

PR Implementation Approach

  • Added MauiMaterialButton style extending Widget.Material3.Button with Material 3 design
  • Removed Android Material 3 default constraints (minWidth, minHeight, padding, insets) to allow full MAUI control
  • Set iconSize to 0dp for proper icon sizing
  • Integrated into Material 3 base theme via materialButtonStyle attribute
  • Added conditional corner radius logic: 20dp for Material 3, 4dp for Material 2

Files Changed

Implementation files:

  1. src/Core/src/Platform/Android/MauiRippleDrawableExtensions.cs (+11, -3) — conditional corner radius logic
  2. src/Core/src/Platform/Android/Resources/values/styles-material3.xml (+19, -0) — Material 3 button style definition

Test files: None

PR Review Context

  • Author: Dhivya-SF4094 (Syncfusion partner)
  • Prior review by StephaneDelcroix: Approved (DISMISSED) — minor suggestions around NET9_0_OR_GREATER consistency, trailing newline
  • Copilot review typo suggestion (btween → between): Outdated — already fixed in current HEAD

Reviewer Disagreements

File:Line Reviewer Says Status
styles-material3.xml Add trailing newline ✅ Fixed in current HEAD
styles-material3.xml Fix typo "btween" → "between" ✅ Fixed in current HEAD (review outdated)

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #33173 Material 3 button styling with runtime feature flag + conditional corner radius ⏳ PENDING (Gate) 2 files Original PR

🚦 Gate — Test Verification
📝 Review SessionRemoved Color-material3 · e649867

Result: ❌ CANNOT RUN - NO TESTS EXIST
Platform: android (specified)
Mode: N/A

Issue

This PR implements Material 3 styling for Button controls on Android but does not include any automated tests. Without tests, the Gate phase cannot verify that:

  1. The Material 3 styling is correctly applied when UseMaterial3=true
  2. The default Material 2 behavior is preserved when UseMaterial3=false
  3. Corner radius changes correctly between Material 2 (4dp) and Material 3 (20dp)

Test Search Results

find src/Controls/tests -name "*33172*" -o -name "*33173*"
(No results found)

Recommendation

Tests should be added to verify:

  • Material 3 button styling when feature flag is enabled
  • Backward compatibility with Material 2 (default)
  • Corner radius values for both Material 2 and Material 3 modes

The write-tests-agent can help create automated tests for this feature.


🔧 Fix — Analysis & Comparison
📝 Review SessionRemoved Color-material3 · e649867

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #33173 Material 3 button styling with runtime feature flag + conditional corner radius ✅ PASS (Gate) 2 files Original PR — Gate skipped (no tests)

Exhausted: N/A — Gate did not pass (no tests exist). Fix phase skipped per workflow rules.
Selected Fix: N/A — Skipped due to Gate failure.


📋 Report — Final Recommendation
📝 Review SessionRemoved Color-material3 · e649867

⚠️ Final Recommendation: REQUEST CHANGES

Summary

PR #33173 adds Material 3 styling support for Button controls on Android. The implementation is technically sound and well-structured, but the PR lacks automated tests and has one minor inconsistency with existing codebase patterns.

Key achievements:

  • MauiMaterialButton style correctly extends Widget.Material3.Button
  • ✅ Zeroes out Android constraints (minWidth, minHeight, padding, insets) so MAUI retains full layout control
  • ✅ Conditional corner radius (20dp M3 vs 4dp M2) correctly uses RuntimeFeature.IsMaterial3Enabled
  • ✅ Backward compatible — Material 2 is default (opt-in via UseMaterial3=true)
  • ✅ Minor feedback from prior reviews already addressed (typo fixed, trailing newline added)

Issues requiring fixes:

  1. No automated tests — Cannot verify Material 3 styling works correctly or Material 2 behavior is preserved
  2. #if NET10_0_OR_GREATER on the [FeatureSwitchDefinition] attribute should be #if NET9_0_OR_GREATER to match all other feature flags in RuntimeFeature.cs

Phase Results

Phase Status Notes
Pre-Flight ✅ COMPLETE Context gathered, 2 files changed, no tests
Gate ❌ CANNOT RUN No tests exist for this PR
Fix ⏭️ SKIPPED Gate prerequisite not met
Report ✅ COMPLETE

Testing Status

Gate phase:CANNOT RUN — NO TESTS EXIST

No test files were found matching the issue or PR number. To verify behavior, tests should cover:

  1. Material 3 button style applied when UseMaterial3=true
  2. Material 2 default preserved when UseMaterial3=false
  3. Corner radius is 20dp (M3) vs 4dp (M2) when no explicit CornerRadius is set

The write-tests-agent can help create automated tests for this feature.

Code Review Findings

✅ Good Implementation

  • Style hierarchy: MauiMaterialButton extending Widget.Material3.Button is correct
  • Layout control: All Android defaults zeroed out (minWidth, minHeight, padding, insets) — ensures MAUI controls dimensions
  • Icon size: iconSize: 0dp prevents Material 3's icon padding from affecting layout
  • materialButtonStyle integration: Clean single-line hook in the Material 3 base theme
  • Corner radius logic: Correct conditional using RuntimeFeature.IsMaterial3Enabled

🔴 Required Fix

#if NET10_0_OR_GREATER should be #if NET9_0_OR_GREATER (RuntimeFeature.cs line 151)

Every other feature flag in RuntimeFeature.cs uses NET9_0_OR_GREATER for the [FeatureSwitchDefinition] attribute:

// All existing flags use NET9_0_OR_GREATER:
#if NET9_0_OR_GREATER
[FeatureSwitchDefinition($"{FeatureSwitchPrefix}.{nameof(IsIVisualAssemblyScanningEnabled)}")]
#endif

// IsMaterial3Enabled incorrectly uses NET10_0_OR_GREATER:
#if NET10_0_OR_GREATER   ← should be NET9_0_OR_GREATER
[FeatureSwitchDefinition($"{FeatureSwitchPrefix}.{nameof(IsMaterial3Enabled)}")]
#endif

This inconsistency means the trimming metadata won't be emitted when targeting .NET 9.

🟡 Missing Tests (Blocking for production readiness)

No tests added. The PR should include at minimum:

  • A device test or unit test verifying corner radius changes based on IsMaterial3Enabled
  • Optionally: UI test for visual regression baseline

Recommendation

Request changes for:

  1. Fix NET10_0_OR_GREATERNET9_0_OR_GREATER in RuntimeFeature.cs
  2. Add automated tests (use write-tests-agent for help)

📋 Expand PR Finalization Review
Title: ✅ Good

Current: [Android] Implemented material3 support for Button

Description: ⚠️ Needs Update
  • "Implemented" is past tense / informal; imperative style is preferred for commit messages
  • "material3" should be capitalized as "Material 3"
  • Missing specificity about what was added (style + conditional corner radius)

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

Description of Change

This PR adds Material 3 visual support for the Android Button control when the UseMaterial3 MSBuild property is enabled.

1. styles-material3.xml — Material 3 Button style

  • Added MauiMaterialButton style extending Widget.Material3.Button, which applies Material 3 design tokens (colors, shape, elevation, state behaviors) to MAUI buttons.
  • Removes all Android Material 3 default constraints (minWidth, minHeight, padding, insets) so that MAUI retains full control over button sizing and layout.
  • Sets iconSize to 0dp to allow MAUI's own icon sizing logic to apply without interference from Material 3 defaults.
  • Registered MauiMaterialButton as the global materialButtonStyle in the Material 3 base theme, so all buttons automatically receive Material 3 styling when the feature is enabled.

2. MauiRippleDrawableExtensions.cs — Adaptive default corner radius

  • Renamed DefaultCornerRadius = 4 to DefaultCornerRadiusMaterial2 = 4 (Material Design 2 default).
  • Added DefaultCornerRadiusMaterial3 = 20 (Material Design 3 default, matching the M3 spec).
  • GetStrokeProperties now selects the appropriate default corner radius at runtime using the existing RuntimeFeature.IsMaterial3Enabled feature flag:
    • Material 3 enabled → 20dp default corner radius
    • Material 2 (default) → 4dp default corner radius
  • Explicit CornerRadius set by the developer still takes precedence.

Screenshots

Material Design Spec - Button

Material 2 Material 3

Issues Fixed

Fixes #33172

Code Review: ✅ Passed

Code Review — PR #33173

Files reviewed:

  • src/Core/src/Platform/Android/MauiRippleDrawableExtensions.cs
  • src/Core/src/Platform/Android/Resources/values/styles-material3.xml

🟡 Suggestions

1. Missing trailing newline in XML file

File: src/Core/src/Platform/Android/Resources/values/styles-material3.xml

The diff shows \ No newline at end of file at the end of the XML file. All text files should end with a trailing newline per POSIX convention and to avoid diff noise in the future.

Fix: Add a newline after the closing </resources> tag.


2. Inconsistent ternary operator indentation

File: src/Core/src/Platform/Android/MauiRippleDrawableExtensions.cs, lines ~179–181

The new ternary expression uses 5 tabs of indentation before ? and :, which is more than the surrounding code's indentation level (3 tabs):

// Current (excessive indentation):
var defaultCornerRadius = RuntimeFeature.IsMaterial3Enabled
					? DefaultCornerRadiusMaterial3
					: DefaultCornerRadiusMaterial2;

This should match the ternary style used elsewhere in the file (3 tabs):

// Recommended:
var defaultCornerRadius = RuntimeFeature.IsMaterial3Enabled
			? DefaultCornerRadiusMaterial3
			: DefaultCornerRadiusMaterial2;

3. No automated tests added

The PR introduces a runtime-conditional behavior change (corner radius 20dp vs 4dp depending on RuntimeFeature.IsMaterial3Enabled) but includes no automated tests. At minimum, a device test or unit test should verify:

  1. When IsMaterial3Enabled is true, the default corner radius applied is 20dp.
  2. When IsMaterial3Enabled is false (default), the default corner radius applied is 4dp.
  3. An explicit CornerRadius set by the developer still takes precedence in both modes.

The write-tests-agent can help create these tests.


4. android:paddingLeft/android:paddingRight vs RTL-aware alternatives

File: src/Core/src/Platform/Android/Resources/values/styles-material3.xml

The MauiMaterialButton style uses android:paddingLeft and android:paddingRight. Since the intent is to zero out all padding so MAUI manages it, the RTL-aware equivalents (android:paddingStart / android:paddingEnd) would be more correct on API 17+. However, because all values are 0dp, there is no practical difference in this case — this is a low-priority note.


✅ Looks Good

  • Style hierarchy is correct: MauiMaterialButton correctly extends Widget.Material3.Button, inheriting all Material 3 tokens while overriding only the layout constraints MAUI manages.
  • All constraints zeroed out: minWidth, minHeight, all padding edges, and all inset edges are set to 0dp. This correctly transfers layout control to MAUI.
  • iconSize: 0dp is intentional: Material 3's Widget.Material3.Button has a default iconSize that would interfere with MAUI's icon rendering logic. Setting it to 0dp disables Material's icon size override and allows MAUI's own drawable sizing to take effect.
  • materialButtonStyle hook is clean: A single attribute addition to the Material 3 base theme is the correct integration point — all buttons automatically pick it up without any per-widget changes.
  • Corner radius logic is correct: RuntimeFeature.IsMaterial3Enabled correctly guards the choice, and the fallback path preserves the existing Material 2 behavior (4dp) unchanged.
  • Backward compatible: Material 3 is opt-in via UseMaterial3=true; default behavior (Material 2) is fully preserved.

@rmarinho rmarinho added s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-gate-failed AI could not verify tests catch the bug s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Feb 18, 2026
@Dhivya-SF4094
Copy link
Copy Markdown
Contributor Author

Added UI tests and addressed all valid concerns.

@sheiksyedm sheiksyedm added the s/agent-suggestions-implemented Maintainer applies when PR author adopts agent's recommendation label Feb 20, 2026
@kubaflo kubaflo removed s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-gate-failed AI could not verify tests catch the bug labels Feb 25, 2026
@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).

@jfversluis
Copy link
Copy Markdown
Member

📋 PR Finalization Review

Title: ⚠️ Needs Update

Current: [Android] Implemented material3 support for Button

Recommended: [Android] Button: Implement Material 3 support

Description: ✅ Excellent

The existing description is excellent:

  • ✅ Clear Description of Change
  • ✅ Technical details (styles, attributes)
  • ✅ Screenshots for comparison
  • ✅ NOTE block included
Code Review: ✅ Passed

✅ Looks Good

  • Correct use of MauiMaterialButton style extending Widget.Material3.Button
  • iconSize set to �dp in style to allow MAUI manual sizing
  • MauiMaterialButton.cs properly handles icon size calculation and bottom gravity
  • Comprehensive test coverage for Material 3 properties

🟡 Suggestions

  • Ensure MauiMaterialButton.cs OnMeasure logic for Icon handles all edge cases, but current implementation looks robust based on MaterialButton source.

@jfversluis jfversluis changed the base branch from main to inflight/current February 27, 2026 18:21
@jfversluis jfversluis merged commit 9b6603a into dotnet:inflight/current Feb 27, 2026
146 of 150 checks passed
@jfversluis jfversluis added this to the .NET 10 SR5 milestone Feb 27, 2026
jfversluis pushed a commit that referenced this pull request Mar 2, 2026
<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!
<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

## Description of Change
 
This pull request adds support for Material 3 styling for the Button
control on Android in .NET MAUI. It introduces runtime feature toggling
for Material 3, configures the necessary Android resources and theming
infrastructure, and applies Material 3 styling to Button controls.
 
### Material 3 Button support and theming:
 
- **Added `MauiMaterialButton` style**, which extends
`Widget.Material3.Button` and applies Material 3 design to MAUI buttons.
This style removes Android Material 3 default constraints (minWidth,
minHeight, padding, insets) to allow full MAUI control over button
sizing and layout, and sets `iconSize` to 0dp for proper icon
sizing.[[1]](diffhunk://#diff-ad5ac218072f5fc910079c411a1cb0a014f67083b7bcbbfd3e8fd041f4a1588eR39-R55)
 
- **Integrated `MauiMaterialButton` into Material 3 base theme** by
setting `materialButtonStyle` attribute to reference the custom button
style, ensuring all buttons automatically receive Material 3 styling
when the feature is enabled.
[[1]](diffhunk://#diff-ad5ac218072f5fc910079c411a1cb0a014f67083b7bcbbfd3e8fd041f4a1588eR8)


Fixes #33172

### Screenshots

Material Design Spec -
[Button](https://m3.material.io/components/buttons/specs)
| Material 2  | Material 3 |
|---------|--------|
| <img height=600 width=300
src="https://github.com/user-attachments/assets/dd767cb0-2672-4514-bdb6-7b2cb8582e14">
|  <img height=600 width=300
src="https://github.com/user-attachments/assets/92e69117-fc8b-4942-898b-aa129bead4dc"> 
|
jfversluis pushed a commit that referenced this pull request Mar 2, 2026
<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!
<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

## Description of Change
 
This pull request adds support for Material 3 styling for the Button
control on Android in .NET MAUI. It introduces runtime feature toggling
for Material 3, configures the necessary Android resources and theming
infrastructure, and applies Material 3 styling to Button controls.
 
### Material 3 Button support and theming:
 
- **Added `MauiMaterialButton` style**, which extends
`Widget.Material3.Button` and applies Material 3 design to MAUI buttons.
This style removes Android Material 3 default constraints (minWidth,
minHeight, padding, insets) to allow full MAUI control over button
sizing and layout, and sets `iconSize` to 0dp for proper icon
sizing.[[1]](diffhunk://#diff-ad5ac218072f5fc910079c411a1cb0a014f67083b7bcbbfd3e8fd041f4a1588eR39-R55)
 
- **Integrated `MauiMaterialButton` into Material 3 base theme** by
setting `materialButtonStyle` attribute to reference the custom button
style, ensuring all buttons automatically receive Material 3 styling
when the feature is enabled.
[[1]](diffhunk://#diff-ad5ac218072f5fc910079c411a1cb0a014f67083b7bcbbfd3e8fd041f4a1588eR8)


Fixes #33172

### Screenshots

Material Design Spec -
[Button](https://m3.material.io/components/buttons/specs)
| Material 2  | Material 3 |
|---------|--------|
| <img height=600 width=300
src="https://github.com/user-attachments/assets/dd767cb0-2672-4514-bdb6-7b2cb8582e14">
|  <img height=600 width=300
src="https://github.com/user-attachments/assets/92e69117-fc8b-4942-898b-aa129bead4dc"> 
|
github-actions bot pushed a commit that referenced this pull request Mar 3, 2026
<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!
<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

## Description of Change
 
This pull request adds support for Material 3 styling for the Button
control on Android in .NET MAUI. It introduces runtime feature toggling
for Material 3, configures the necessary Android resources and theming
infrastructure, and applies Material 3 styling to Button controls.
 
### Material 3 Button support and theming:
 
- **Added `MauiMaterialButton` style**, which extends
`Widget.Material3.Button` and applies Material 3 design to MAUI buttons.
This style removes Android Material 3 default constraints (minWidth,
minHeight, padding, insets) to allow full MAUI control over button
sizing and layout, and sets `iconSize` to 0dp for proper icon
sizing.[[1]](diffhunk://#diff-ad5ac218072f5fc910079c411a1cb0a014f67083b7bcbbfd3e8fd041f4a1588eR39-R55)
 
- **Integrated `MauiMaterialButton` into Material 3 base theme** by
setting `materialButtonStyle` attribute to reference the custom button
style, ensuring all buttons automatically receive Material 3 styling
when the feature is enabled.
[[1]](diffhunk://#diff-ad5ac218072f5fc910079c411a1cb0a014f67083b7bcbbfd3e8fd041f4a1588eR8)


Fixes #33172

### Screenshots

Material Design Spec -
[Button](https://m3.material.io/components/buttons/specs)
| Material 2  | Material 3 |
|---------|--------|
| <img height=600 width=300
src="https://github.com/user-attachments/assets/dd767cb0-2672-4514-bdb6-7b2cb8582e14">
|  <img height=600 width=300
src="https://github.com/user-attachments/assets/92e69117-fc8b-4942-898b-aa129bead4dc"> 
|
HarishKumarSF4517 pushed a commit to HarishKumarSF4517/maui that referenced this pull request Mar 5, 2026
<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!
<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

## Description of Change
 
This pull request adds support for Material 3 styling for the Button
control on Android in .NET MAUI. It introduces runtime feature toggling
for Material 3, configures the necessary Android resources and theming
infrastructure, and applies Material 3 styling to Button controls.
 
### Material 3 Button support and theming:
 
- **Added `MauiMaterialButton` style**, which extends
`Widget.Material3.Button` and applies Material 3 design to MAUI buttons.
This style removes Android Material 3 default constraints (minWidth,
minHeight, padding, insets) to allow full MAUI control over button
sizing and layout, and sets `iconSize` to 0dp for proper icon
sizing.[[1]](diffhunk://#diff-ad5ac218072f5fc910079c411a1cb0a014f67083b7bcbbfd3e8fd041f4a1588eR39-R55)
 
- **Integrated `MauiMaterialButton` into Material 3 base theme** by
setting `materialButtonStyle` attribute to reference the custom button
style, ensuring all buttons automatically receive Material 3 styling
when the feature is enabled.
[[1]](diffhunk://#diff-ad5ac218072f5fc910079c411a1cb0a014f67083b7bcbbfd3e8fd041f4a1588eR8)


Fixes dotnet#33172

### Screenshots

Material Design Spec -
[Button](https://m3.material.io/components/buttons/specs)
| Material 2  | Material 3 |
|---------|--------|
| <img height=600 width=300
src="https://github.com/user-attachments/assets/dd767cb0-2672-4514-bdb6-7b2cb8582e14">
|  <img height=600 width=300
src="https://github.com/user-attachments/assets/92e69117-fc8b-4942-898b-aa129bead4dc"> 
|
jfversluis pushed a commit that referenced this pull request Mar 6, 2026
… - 1 (#34334)

This PR addresses the UI test image failures that occurred in the
inflight/candidate branch #34294 and
includes updates to improve rendering and test stability across
platforms.

### Controls Handler Registration

* Simplified the logic for registering handlers for controls like
`Label`, `Editor`, `Picker`, `RadioButton`, and `TimePicker` in
`AppHostBuilderExtensions.cs`. The new approach registers all fallback
handlers together, reducing duplicated code and improving
maintainability.

### 
* In the NavigationRootManager class, the line
_rootView.SetTitleBar(null, null); was added in this PR
#34032 by a contributor due to an AI
minor suggestion, but this line causes an issue when swapping pages, so
the TitlebarWorksWhenSwitchingPage test fails. Setting SetTitleBar to
null is already implemented in the WindowHandler class in the
[DisconnectHandler](https://github.com/dotnet/maui/blob/main/src/Core/src/Handlers/Window/WindowHandler.Windows.cs#L55)
method, so I have removed this line _rootView.SetTitleBar(null, null);
from the PR [34032](#34032).

### Image Resave:
* Resaved images: DownSizeImageAppearProperly,
Material3CheckBoxFeatureTests, Material3CheckBox_DefaultAppearance,
DownSizeImageAppearProperly,
VerifyLinearGradientBrushWithStrokeAndOpacity,
VerifyRadialGradientBrushWithOpacity,
VerifyRadialGradientBrushWithShadowAndOpacity,
VerifyLinearGradientBrushWithOpacity,
VerifyLinearGradientBrushWithShadowAndOpacity,
DarkTheme_VerifyVisualState. These PR fixes address the issues:
#33173,
#31567,
#33590,
#34036
* Added the base images for iOS 26, Mac, and Windows.

### Test Stability and Platform-Specific Handling

* Added a platform-specific ignore for a Shell flyout test on iOS 26 due
to a known bug, improving test reliability and clarity about platform
limitations.
* Updated a CollectionView scroll test to wait for specific elements on
Windows, ensuring the test works correctly across platforms.

### DatePicker Handler Tests

* Introduced a helper method `EnsureDialogCreated` in
`DatePickerHandlerTests.Android.cs` to reliably create the native dialog
before reading min/max values, addressing issues caused by lazy dialog
creation after a recent PR. This helper is now used in relevant tests to
improve robustness.
[[1]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R26)
[[2]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R54)
[[3]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R131-R146)
* Clarified the DatePicker test logic in `DatePickerTests.cs` to ensure
the `DateSelected` event fires correctly regardless of dialog state,
improving test reliability on Android.

### Test Case Organization

* Removed the obsolete `VerifyFlyoutPage_IsEnabled` test and renumbered
the remaining FlyoutPage tests in `FlyoutPageFeatureTests.cs` to
maintain sequential order and consistency.
[[1]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L176-R177)
[[2]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L204-R191)
[[3]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L222-R209)
[[4]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L240-R227)
[[5]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L254-R241)
[[6]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L268-R255)
[[7]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L284-R271)
[[8]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L299-R286)
[[9]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L310-R297)
[[10]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L327-R314)
[[11]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L340-R327)
[[12]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L357-R344)
[[13]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L376-R363)
[[14]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L387-R374)
[[15]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L400-R387)
github-actions bot pushed a commit that referenced this pull request Mar 6, 2026
<!-- Please let the below note in for people that find this PR -->
> [!NOTE]
> Are you waiting for the changes in this PR to be merged?
> It would be very helpful if you could [test the resulting
artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from
this PR and let us know in a comment if this change resolves your issue.
Thank you!
<!--
!!!!!!! MAIN IS THE ONLY ACTIVE BRANCH. MAKE SURE THIS PR IS TARGETING
MAIN. !!!!!!!
-->

## Description of Change
 
This pull request adds support for Material 3 styling for the Button
control on Android in .NET MAUI. It introduces runtime feature toggling
for Material 3, configures the necessary Android resources and theming
infrastructure, and applies Material 3 styling to Button controls.
 
### Material 3 Button support and theming:
 
- **Added `MauiMaterialButton` style**, which extends
`Widget.Material3.Button` and applies Material 3 design to MAUI buttons.
This style removes Android Material 3 default constraints (minWidth,
minHeight, padding, insets) to allow full MAUI control over button
sizing and layout, and sets `iconSize` to 0dp for proper icon
sizing.[[1]](diffhunk://#diff-ad5ac218072f5fc910079c411a1cb0a014f67083b7bcbbfd3e8fd041f4a1588eR39-R55)
 
- **Integrated `MauiMaterialButton` into Material 3 base theme** by
setting `materialButtonStyle` attribute to reference the custom button
style, ensuring all buttons automatically receive Material 3 styling
when the feature is enabled.
[[1]](diffhunk://#diff-ad5ac218072f5fc910079c411a1cb0a014f67083b7bcbbfd3e8fd041f4a1588eR8)


Fixes #33172

### Screenshots

Material Design Spec -
[Button](https://m3.material.io/components/buttons/specs)
| Material 2  | Material 3 |
|---------|--------|
| <img height=600 width=300
src="https://github.com/user-attachments/assets/dd767cb0-2672-4514-bdb6-7b2cb8582e14">
|  <img height=600 width=300
src="https://github.com/user-attachments/assets/92e69117-fc8b-4942-898b-aa129bead4dc"> 
|
github-actions bot pushed a commit that referenced this pull request Mar 6, 2026
… - 1 (#34334)

This PR addresses the UI test image failures that occurred in the
inflight/candidate branch #34294 and
includes updates to improve rendering and test stability across
platforms.

### Controls Handler Registration

* Simplified the logic for registering handlers for controls like
`Label`, `Editor`, `Picker`, `RadioButton`, and `TimePicker` in
`AppHostBuilderExtensions.cs`. The new approach registers all fallback
handlers together, reducing duplicated code and improving
maintainability.

### 
* In the NavigationRootManager class, the line
_rootView.SetTitleBar(null, null); was added in this PR
#34032 by a contributor due to an AI
minor suggestion, but this line causes an issue when swapping pages, so
the TitlebarWorksWhenSwitchingPage test fails. Setting SetTitleBar to
null is already implemented in the WindowHandler class in the
[DisconnectHandler](https://github.com/dotnet/maui/blob/main/src/Core/src/Handlers/Window/WindowHandler.Windows.cs#L55)
method, so I have removed this line _rootView.SetTitleBar(null, null);
from the PR [34032](#34032).

### Image Resave:
* Resaved images: DownSizeImageAppearProperly,
Material3CheckBoxFeatureTests, Material3CheckBox_DefaultAppearance,
DownSizeImageAppearProperly,
VerifyLinearGradientBrushWithStrokeAndOpacity,
VerifyRadialGradientBrushWithOpacity,
VerifyRadialGradientBrushWithShadowAndOpacity,
VerifyLinearGradientBrushWithOpacity,
VerifyLinearGradientBrushWithShadowAndOpacity,
DarkTheme_VerifyVisualState. These PR fixes address the issues:
#33173,
#31567,
#33590,
#34036
* Added the base images for iOS 26, Mac, and Windows.

### Test Stability and Platform-Specific Handling

* Added a platform-specific ignore for a Shell flyout test on iOS 26 due
to a known bug, improving test reliability and clarity about platform
limitations.
* Updated a CollectionView scroll test to wait for specific elements on
Windows, ensuring the test works correctly across platforms.

### DatePicker Handler Tests

* Introduced a helper method `EnsureDialogCreated` in
`DatePickerHandlerTests.Android.cs` to reliably create the native dialog
before reading min/max values, addressing issues caused by lazy dialog
creation after a recent PR. This helper is now used in relevant tests to
improve robustness.
[[1]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R26)
[[2]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R54)
[[3]](diffhunk://#diff-de28fdea458f311cfcc7e767c7e9e2a4c7c36e4d065ae2ebf2a25b420f183c29R131-R146)
* Clarified the DatePicker test logic in `DatePickerTests.cs` to ensure
the `DateSelected` event fires correctly regardless of dialog state,
improving test reliability on Android.

### Test Case Organization

* Removed the obsolete `VerifyFlyoutPage_IsEnabled` test and renumbered
the remaining FlyoutPage tests in `FlyoutPageFeatureTests.cs` to
maintain sequential order and consistency.
[[1]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L176-R177)
[[2]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L204-R191)
[[3]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L222-R209)
[[4]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L240-R227)
[[5]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L254-R241)
[[6]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L268-R255)
[[7]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L284-R271)
[[8]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L299-R286)
[[9]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L310-R297)
[[10]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L327-R314)
[[11]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L340-R327)
[[12]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L357-R344)
[[13]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L376-R363)
[[14]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L387-R374)
[[15]](diffhunk://#diff-a20c8165e92130c8ebbda3af607c3dd309cf1c1b6c85942abd6ed81132510fb3L400-R387)
PureWeen added a commit that referenced this pull request Mar 11, 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 46 commits with various improvements,
bug fixes, and enhancements.


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

- [Implement Material3 support for
Button](#33172)
  </details>

## CollectionView
- [Android] Fix RemainingItemsThresholdReachedCommand not firing when
CollectionView has Header and Footer both defined by @SuthiYuvaraj in
#29618
  <details>
  <summary>🔧 Fixes</summary>

- [Android : RemainingItemsThresholdReachedCommand not firing when
CollectionVew has Header and Footer both
defined](#29588)
  </details>

- [iOS/MacCatalyst] Fix CollectionView ScrollTo for horizontal layouts
by @Shalini-Ashokan in #33853
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS/MacCatalyst] CollectionView ScrollTo does not work with
horizontal Layout](#33852)
  </details>

- [iOS & Mac] Fixed IndicatorView Size doesnt update dynamically by
@SubhikshaSf4851 in #31129
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS, Catalyst] IndicatorView.IndicatorSize does not update
dynamically at runtime](#31064)
  </details>

- [Android] Fix for CollectionView Scrolled event is triggered on the
initial app load. by @BagavathiPerumal in
#33558
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] CollectionView Scrolled event is triggered on the initial
app load.](#33333)
  </details>

- [iOS, Android] Fix for CollectionView IsEnabled=false allows touch
interactions by @praveenkumarkarunanithi in
#31403
  <details>
  <summary>🔧 Fixes</summary>

- [More issues with CollectionView IsEnabled, InputTransparent, Opacity
via Styles and code behind](#19771)
  </details>

- [iOS] Fix VerticalOffset Update When Modifying
CollectionView.ItemsSource While Scrolled by @devanathan-vaithiyanathan
in #34153
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS]VerticalOffset Not Reset to Zero After Clearing ItemSource in
CollectionView](#26798)
  </details>

## DateTimePicker
- [Android] Fix DatePicker MinimumDate/MaximumDate not updating
dynamically by @HarishwaranVijayakumar in
#33687
  <details>
  <summary>🔧 Fixes</summary>

- [[regression/8.0.3] [Android] DatePicker control minimum date
issue](#19256)
- [[Android] DatePicker does not update MinimumDate / MaximumDate in the
Popup when set in the viewmodel after first
opening](#33583)
  </details>

## Drawing
- Android drawable perf by @albyrock87 in
#31567

## Editor
- [Android] Implemented material3 support for Editor by
@SyedAbdulAzeemSF4852 in #33478
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 Support for
Editor](#33476)
  </details>

## Entry
- [iOS, Mac] Fix for CursorPosition not updating when typing into Entry
control by @SyedAbdulAzeemSF4852 in
#30505
  <details>
  <summary>🔧 Fixes</summary>

- [Entry control CursorPosition does not update on TextChanged event
[iOS Maui 8.0.7] ](#20911)
- [CursorPosition not calculated correctly on behaviors events for iOS
devices](#32483)
  </details>

## Flyoutpage
- [Android, Windows] Fix for FlyoutPage toolbar button not updating on
orientation change by @praveenkumarkarunanithi in
#31962
  <details>
  <summary>🔧 Fixes</summary>

- [Flyout page in Android does not show flyout button (burger)
consistently](#24468)
  </details>

- Fix for First Item in CollectionView Overlaps in FlyoutPage.Flyout on
iOS by @praveenkumarkarunanithi in
#29265
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] CollectionView not rendering first item correctly in
FlyoutPage.Flyout](#29170)
  </details>

## Image
- [Android] Fix excessive memory usage for stream and resource-based
image loading by @Shalini-Ashokan in
#33590
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Unexpected high Bitmap.ByteCount when loading image via
ImageSource.FromResource() or ImageSource.FromStream() in .NET
MAUI](#33239)
  </details>

- [Android] Fix for Resize method returns an image that has already been
disposed by @SyedAbdulAzeemSF4852 in
#29964
  <details>
  <summary>🔧 Fixes</summary>

- [In GraphicsView, the Resize method returns an image that has already
been disposed](#29961)
- [IIMage.Resize bugged
behaviour](#31103)
  </details>

## Label
- Fixed Label Span font property inheritance when applied via Style by
@SubhikshaSf4851 in #34110
  <details>
  <summary>🔧 Fixes</summary>

- [`Span` does not inherit text styling from `Label` if that styling is
applied using `Style` ](#21326)
  </details>

- [Android] Implemented material3 support for Label by
@SyedAbdulAzeemSF4852 in #33599
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 Support for
Label](#33598)
  </details>

## Map
- [Android] Fix Circle Stroke color is incorrectly updated as Fill
color. by @NirmalKumarYuvaraj in
#33643
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Circle Stroke color is incorrectly updated as Fill
color.](#33642)
  </details>

## Mediapicker
- [iOS] Fix: invoke MediaPicker completion handler after
DismissViewController by @yuriikyry4enko in
#34250
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] Media Picker UIImagePickerController closing
issue](#21996)
  </details>

## Navigation
- Fix ContentPage memory leak on Android when using NavigationPage
modally (fixes #33918) by @brunck in
#34117
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Modal TabbedPage whose tabs are NavigationPage(ContentPage)
is retained after
PopModalAsync()](#33918)
  </details>

## Picker
- [Android] Implement material3 support for TimePicker by
@HarishwaranVijayakumar in #33646
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 support for
TimePicker](#33645)
  </details>

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

- [Implement Material3 support for
Picker](#33665)
  </details>

## RadioButton
- [Android] Implemented material3 support for RadioButton by
@SyedAbdulAzeemSF4852 in #33468
  <details>
  <summary>🔧 Fixes</summary>

- [Implement Material3 Support for
RadioButton](#33467)
  </details>

## Setup
- Clarify MA003 error message by @jeremy-visionaid in
#34067
  <details>
  <summary>🔧 Fixes</summary>

- [MA003 false positive with
9.0.21](#26599)
  </details>

## Shell
- [Android] Fix TabBar FlowDirection not updating dynamically by
@SubhikshaSf4851 in #33091
  <details>
  <summary>🔧 Fixes</summary>

- [[Android, iOS] FlowDirection RTL is not updated dynamically on Shell
TabBar](#32993)
  </details>

- [Android] Fix page not disposed on Shell replace navigation by
@Vignesh-SF3580 in #33426
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] [Shell] replace navigation leaks current
page](#25134)
  </details>

- [Android] Fixed Shell flyout does not disable scrolling when
FlyoutVerticalScrollMode is set to Disabled by @NanthiniMahalingam in
#32734
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Shell.FlyoutVerticalScrollMode="Disabled" does not disable
scrolling](#32477)
  </details>

## Single Project
- Fix: Throw a clear error when an SVG lacks dimensions instead of a
NullReferenceException by @Shalini-Ashokan in
#33194
  <details>
  <summary>🔧 Fixes</summary>

- [MAUI Fails To Convert Valid SVG Files Into PNG Files (Object
reference not set to an instance of an
object)](#32460)
  </details>

## SwipeView
- [iOS] Fix SwipeView stays open on iOS after updating content by
@devanathan-vaithiyanathan in #31248
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS] - Swipeview with collectionview
issue](#19541)
  </details>

## TabbedPage
- [Windows] Fixed IsEnabled Property not works on Tabs by
@NirmalKumarYuvaraj in #26728
  <details>
  <summary>🔧 Fixes</summary>

- [ShellContent IsEnabledProperty does not
work](#5161)
- [[Windows] Shell Tab IsEnabled Not
Working](#32996)
  </details>

- [Android] Fix NavigationBar overlapping StatusBar when NavigationBar
visibility changes by @Vignesh-SF3580 in
#33359
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] NavigationBar overlaps with StatusBar when mixing
HasNavigationBar=true/false in TabbedPage on Android 15 (API
35)](#33340)
  </details>

## Templates
- Fix for unable to open task using keyboard navigation on windows
platform by @SuthiYuvaraj in #33647
  <details>
  <summary>🔧 Fixes</summary>

- [Unable to open task using keyboard: A11y_.NET maui_User can get all
the insights of
Dashboard_Keyboard](#30787)
  </details>

## TitleView
- Fix for NavigationPage.TitleView does not expand with host window in
iPadOS 26+ by @SuthiYuvaraj in #33088

## Toolbar
- [iOS] Fix toolbar items ignoring BarTextColor on iOS/MacCatalyst 26+
by @Shalini-Ashokan in #34036
  <details>
  <summary>🔧 Fixes</summary>

- [[iOS 26] ToolbarItem color with custom BarTextColor not
working](#33970)
  </details>

- [Android] Fix for ToolbarItem retaining the icon from the previous
page on Android when using NavigationPage. by @BagavathiPerumal in
#32311
  <details>
  <summary>🔧 Fixes</summary>

- [Toolbaritem keeps the icon of the previous page on Android, using
NavigationPage (not shell)](#31727)
  </details>

## WebView
- [Android] Fix WebView in a grid expands beyond it's cell by
@devanathan-vaithiyanathan in #32145
  <details>
  <summary>🔧 Fixes</summary>

- [Android - WebView in a grid expands beyond it's
cell](#32030)
  </details>

## Xaml
- ContentPresenter: Propagate binding context to children with explicit
TemplateBinding by @HarishwaranVijayakumar in
#30880
  <details>
  <summary>🔧 Fixes</summary>

- [Binding context in
ContentPresenter](#23797)
  </details>


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

- [Revert] ContentPresenter: Propagate binding context to children with
explicit TemplateBinding by @Ahamed-Ali in
#34332

</details>

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

- [Testing] Feature Matrix UITest Cases for Shell Flyout Page by
@NafeelaNazhir in #32525
- [Testing] Feature Matrix UITest Cases for Brushes by
@LogishaSelvarajSF4525 in #31833
- [Testing] Feature Matrix UITest Cases for BindableLayout by
@LogishaSelvarajSF4525 in #33108
- [Android] Add UI tests for Material 3 CheckBox by
@HarishwaranVijayakumar in #34126
  <details>
  <summary>🔧 Fixes</summary>

- [[Android] Add UI tests for Material 3
CheckBox](#34125)
  </details>
- [Testing] Feature Matrix UITest Cases for Shell Tabbed Page by
@NafeelaNazhir in #33159
- [Testing] Fixed Test case failure in PR 34294 - [03/2/2026] Candidate
- 1 by @TamilarasanSF4853 in #34334

</details>

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

- Bumps Syncfusion.Maui.Toolkit dependency to version 1.0.9 by
@PaulAndersonS in #34178
- Fix crash when closing Windows based app when using TitleBar by
@MFinkBK in #34032
  <details>
  <summary>🔧 Fixes</summary>

- [Unhandled exception "Value does not fall within the expected range"
when closing Windows app](#32194)
  </details>

</details>
**Full Changelog**:
main...inflight/candidate
@kubaflo kubaflo added the s/agent-review-incomplete AI agent could not complete all phases (blocker, timeout, error) label Mar 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area-controls-button Button, ImageButton community ✨ Community Contribution material3 partner/syncfusion Issues / PR's with Syncfusion collaboration platform/android s/agent-review-incomplete AI agent could not complete all phases (blocker, timeout, error) s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) s/agent-suggestions-implemented Maintainer applies when PR author adopts agent's recommendation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement Material3 support for Button

8 participants