Skip to content

[Windows] Fixed TimePicker CharacterSpacing issue#30533

Merged
kubaflo merged 12 commits into
dotnet:inflight/currentfrom
SubhikshaSf4851:fix-30199
Apr 13, 2026
Merged

[Windows] Fixed TimePicker CharacterSpacing issue#30533
kubaflo merged 12 commits into
dotnet:inflight/currentfrom
SubhikshaSf4851:fix-30199

Conversation

@SubhikshaSf4851
Copy link
Copy Markdown
Contributor

Note

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

Root Cause:

The UpdateCharacterSpacing method didn't apply spacing to the individual text blocks in TimePicker

Description of Change

Enhanced the UpdateCharacterSpacing method to apply CharacterSpacing to individual text blocks (HourTextBlock, MinuteTextBlock, and PeriodTextBlock) within the TimePicker. This ensures the property works correctly even when the control is loaded asynchronously.

Issues Fixed

Fixes #30199

Tested the behaviour in the following platforms

  • Windows
  • Android
  • iOS
  • Mac

Screenshot

Before Issue Fix After Issue Fix
beforeFix30199 Screenshot 2025-07-10 155258

@dotnet-policy-service dotnet-policy-service Bot added community ✨ Community Contribution partner/syncfusion Issues / PR's with Syncfusion collaboration labels Jul 10, 2025
@SubhikshaSf4851 SubhikshaSf4851 marked this pull request as ready for review July 11, 2025 03:52
Copilot AI review requested due to automatic review settings July 11, 2025 03:52
@SubhikshaSf4851 SubhikshaSf4851 requested a review from a team as a code owner July 11, 2025 03:52
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR fixes a bug where the Windows TimePicker control did not apply character spacing to its internal text blocks when loaded asynchronously. It enhances the UpdateCharacterSpacing extension to defer applying the spacing until after the control is loaded and adds helper methods to target each text block.

  • Applies CharacterSpacing to HourTextBlock, MinuteTextBlock, and PeriodTextBlock when the control is ready.
  • Uses OnLoaded to handle async loading scenarios.
  • Adds UI tests in both HostApp and Shared.Tests to visually verify the fix.

Reviewed Changes

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

File Description
src/Core/src/Platform/Windows/TimePickerExtensions.cs Enhanced UpdateCharacterSpacing to wait for IsLoaded and apply spacing to each part.
src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30199.cs Added a UI test that waits for the TimePicker and captures a screenshot.
src/Controls/tests/TestCases.HostApp/Issues/Issue30199.cs Created a HostApp page with a TimePicker configured to demonstrate the fix.
Comments suppressed due to low confidence (2)

src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30199.cs:21

  • The UI test currently only waits for the element and takes a screenshot. Consider adding assertions that programmatically verify the CharacterSpacing on the internal TextBlocks or compare pixel spacing to ensure automated validation.
		App.WaitForElement("timePicker");

src/Core/src/Platform/Windows/TimePickerExtensions.cs:23

  • [nitpick] This public extension method lacks XML documentation. Adding a <summary> explaining its purpose and behavior (especially the use of OnLoaded) would improve discoverability and maintainability.
		public static void UpdateCharacterSpacing(this TimePicker platformTimePicker, ITimePicker timePicker)

Comment thread src/Core/src/Platform/Windows/TimePickerExtensions.cs Outdated
@jsuarezruiz
Copy link
Copy Markdown
Contributor

/azp run MAUI-UITests-public

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

@jsuarezruiz
Copy link
Copy Markdown
Contributor

/azp run MAUI-UITests-public

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

@jsuarezruiz
Copy link
Copy Markdown
Contributor

/rebase

@jsuarezruiz
Copy link
Copy Markdown
Contributor

/rebase

@jsuarezruiz
Copy link
Copy Markdown
Contributor

/azp run MAUI-UITests-public

@azure-pipelines
Copy link
Copy Markdown

Azure Pipelines successfully started running 1 pipeline(s).

Comment thread src/Core/src/Platform/Windows/TimePickerExtensions.cs Outdated
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Mar 4, 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 -- 30533

Or

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

@MauiBot
Copy link
Copy Markdown
Collaborator

MauiBot commented Mar 25, 2026

🤖 AI Summary

👋 @SubhikshaSf4851 — new AI review results are available. Please review the latest session below.

📊 Review Session3f77ad4 · Updated Suggestion · 2026-04-13 13:05 UTC
🔍 Pre-Flight — Context & Validation

Issue: #30199 - [Windows] TimePicker CharacterSpacing Property Not Working on Windows
PR: #30533 - [Windows] Fixed TimePicker CharacterSpacing issue
Platforms Affected: Windows (primary), snapshots also provided for Android and iOS
Files Changed: 2 implementation, 6 test (including snapshots)

Key Findings

  • Root cause: TimePicker.CharacterSpacing on WinUI doesn't propagate to the internal TextBlocks (HourTextBlock, MinuteTextBlock, PeriodTextBlock) within the control's visual template. Setting platformTimePicker.CharacterSpacing alone has no visible effect.
  • Fix approach: After the control loads, walk the visual tree to find each named TextBlock and apply CharacterSpacing directly.
  • The control loads asynchronously, so an IsLoaded + Loaded event handler guard is needed.
  • Handler accumulation risk: Current implementation uses a new closure per call — if UpdateCharacterSpacing is called multiple times before the control is loaded, multiple Loaded handlers accumulate. Compare with DatePickerExtensions.cs which removes the previous handler before registering a new one (platformDatePicker.Loaded -= OnDatePickerLoaded; ... platformDatePicker.Loaded += OnDatePickerLoaded;).
  • The UpdateIsOpen method in the same file already follows the correct pattern (self-unsubscribing via local variable) but is only called once before load.
  • Test uses [Issue(IssueTracker.Github, "30199", ...)] with a string issue number — the int overload is the standard convention for numeric GitHub issues.
  • Both test files are missing a newline at end of file.
  • Test is wrapped in #if TEST_FAILS_ON_CATALYST which is appropriate since issue [Mac] Character Spacing Property of TimePicker Is Not Functioning as Expected #30532 tracks the Catalyst failure.
  • PlatformAffected.UWP is used but the issue is a MAUI/Windows issue; other Windows issue tests use PlatformAffected.UWP too, so this is acceptable.

Fix Candidates

# Source Approach Test Result Files Changed Notes
PR PR #30533 Subscribe to Loaded event if not yet loaded, then walk visual tree to set CharacterSpacing on HourTextBlock/MinuteTextBlock/PeriodTextBlock ✅ PASSED (Gate) TimePickerExtensions.cs, TimePickerHandler.Windows.cs Has handler accumulation issue for rapid multiple updates before load

🔧 Fix — Analysis & Comparison

Fix Candidates

# Source Approach Test Result Files Changed Notes
1 try-fix (claude-opus-4.6) Move Loaded subscription to ConnectHandler/DisconnectHandler handler lifecycle; UpdateCharacterSpacing applies directly if already loaded ✅ PASS 2 files Clean lifecycle, no accumulation, proper MAUI handler pattern
2 try-fix (claude-sonnet-4.6) DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, ...) to defer visual tree walk ✅ PASS 1 file Simplest — no event subscriptions at all
3 try-fix (gpt-5.3-codex) Synchronous ApplyTemplate() + UpdateLayout() + VisualTreeHelper recursive walk ❌ FAIL 2 files Visual tree not ready synchronously during mapper execution
4 try-fix (gpt-5.4, gemini unavailable) Subscribe to SizeChanged in ConnectHandler, unsubscribe after first fire ✅ PASS 2 files Works but SizeChanged fires post-layout; needs one-shot guard
PR PR #30533 Closure-based Loaded event inside UpdateCharacterSpacing; walks visual tree on load ✅ PASSED (Gate) 2 files Handler accumulation: multiple calls before load register multiple unclearable closures

Cross-Pollination

Model Round New Ideas? Details
claude-opus-4.6 2 Yes Subclass TimePicker as MauiTimePicker, override OnApplyTemplate()
claude-sonnet-4.6 2 Yes Use FrameworkElement.FindName() after ApplyTemplate() — similar to failed attempt 3
gpt-5.3-codex 2 Yes One-shot LayoutUpdated callback — variant of Loaded/SizeChanged pattern
gpt-5.4 2 Yes MauiTimePicker subclass with binding — too large a refactor for this bug fix scope

New ideas from round 2 are either too complex (subclass approach) or too similar to already-covered approaches (LayoutUpdated ≈ SizeChanged). No additional attempts warranted.

Exhausted: Yes — all distinct approaches within reasonable scope have been explored.

Selected Fix: Attempt 2 (DispatcherQueue) — DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low). Simplest implementation, only 1 file changed, no event lifecycle management needed, no handler accumulation possible. Attempt 1 (ConnectHandler) is a close second for most principled MAUI-pattern approach.


📋 Report — Final Recommendation

⚠️ Final Recommendation: REQUEST CHANGES

Phase Status

Phase Status Notes
Pre-Flight ✅ COMPLETE Issue #30199, Windows TimePicker CharacterSpacing
Gate ✅ PASSED Windows platform, tests fail without fix, pass with fix
Try-Fix ✅ COMPLETE 4 attempts: 3 passing, 1 failing; simpler alternatives found
Report ✅ COMPLETE

Summary

PR #30533 fixes a real bug: TimePicker.CharacterSpacing on Windows doesn't propagate to the internal WinUI TextBlocks (HourTextBlock, MinuteTextBlock, PeriodTextBlock). The fix is functionally correct and the gate passed. However, the implementation has a handler accumulation bug and there are simpler alternatives found during try-fix exploration. Two alternative approaches (DispatcherQueue and ConnectHandler lifecycle) are cleaner and avoid the bug entirely.

Root Cause

WinUI's TimePicker.CharacterSpacing property does not automatically propagate to its internal control template TextBlocks. The property must be applied directly to those named TextBlocks after the control's visual tree is materialized (post-Loaded).

Fix Quality

Functional correctness: ✅ Works — gate passed.

Code quality issues:

  1. Handler accumulation bug (TimePickerExtensions.cs:32-41): The PR uses a lambda closure for the Loaded handler. Each call to UpdateCharacterSpacing before the control is loaded appends a NEW handler that cannot be removed by subsequent calls. If CharacterSpacing is updated N times before the control loads, N handlers fire on Loaded. Compare with DatePickerExtensions.cs which uses a local function pattern that correctly removes the previous handler before registering:

    platformDatePicker.Loaded -= OnDatePickerLoaded;  // removes previous
    void OnDatePickerLoaded(object sender, RoutedEventArgs e) { ... }  // local func (stable reference)
    platformDatePicker.Loaded += OnDatePickerLoaded;
  2. Unnecessary using in handler file: using Microsoft.UI.Xaml; was added to TimePickerHandler.Windows.cs but TimePickerHandler.Windows.cs does not directly reference any types from that namespace — the Loaded handler is in TimePickerExtensions.cs.

  3. Test HostApp: string issue number: [Issue(IssueTracker.Github, "30199", ...)] uses a string literal. The convention for numeric GitHub issues is the int overload: [Issue(IssueTracker.Github, 30199, ...)].

  4. Missing newline at end of file: Both TestCases.HostApp/Issues/Issue30199.cs and TestCases.Shared.Tests/Tests/Issues/Issue30199.cs are missing a trailing newline.

Better Alternatives Found

Recommended — Attempt 2 (DispatcherQueue, ✅ PASS, 1 file only):

public static void UpdateCharacterSpacing(this TimePicker platformTimePicker, ITimePicker timePicker)
{
    platformTimePicker.CharacterSpacing = timePicker.CharacterSpacing.ToEm();
    platformTimePicker.DispatcherQueue.TryEnqueue(DispatcherQueuePriority.Low, () =>
    {
        ApplyCharacterSpacingToTextBlocks(platformTimePicker);
    });
}

Only TimePickerExtensions.cs needs to change. No event subscriptions, no accumulation risk.

Alternative — Attempt 1 (ConnectHandler lifecycle, ✅ PASS, follows MAUI patterns):
Subscribe to Loaded once in ConnectHandler, unsubscribe in DisconnectHandler. UpdateCharacterSpacing sets the property and calls ApplyCharacterSpacingToTextBlocks() directly if already loaded. Proper MAUI handler lifecycle management with zero accumulation risk.

Minimum fix to current PR approach (if author prefers to keep same structure): Follow the DatePickerExtensions.cs local-function pattern — use a local function (not a lambda closure) so it can be de-registered with -= before re-registering.

Minor Test Note

The test only calls VerifyScreenshot() on the initial state of the TimePicker. This is a valid regression guard, but it does not verify dynamic updates (e.g., changing CharacterSpacing after the page is loaded). This is acceptable for the current scope.


@MauiBot MauiBot added s/agent-changes-requested AI agent recommends changes - found a better alternative or issues s/agent-fix-win AI found a better alternative fix than the PR s/agent-reviewed PR was reviewed by AI agent workflow (full 4-phase review) labels Mar 25, 2026
@MauiBot
Copy link
Copy Markdown
Collaborator

MauiBot commented Mar 29, 2026

🚦 Gate — Test Before and After Fix

👋 @SubhikshaSf4851 — new gate results are available. Please review the latest session below.

🚦 Gate Session3f77ad4 · Updated Suggestion · 2026-04-13 12:06 UTC

Gate Result: ✅ PASSED

Platform: WINDOWS · Base: main · Merge base: b43bdad1

Test Without Fix (expect FAIL) With Fix (expect PASS)
🖥️ Issue30199 Issue30199 ✅ FAIL — 573s ✅ PASS — 469s
🔴 Without fix — 🖥️ Issue30199: FAIL ✅ · 573s
  Determining projects to restore...
  Restored D:\a\1\s\src\Graphics\src\Graphics\Graphics.csproj (in 41.63 sec).
  Restored D:\a\1\s\src\Controls\src\Xaml\Controls.Xaml.csproj (in 41.7 sec).
  Restored D:\a\1\s\src\Essentials\src\Essentials.csproj (in 23 ms).
  Restored D:\a\1\s\src\Core\src\Core.csproj (in 91 ms).
  Restored D:\a\1\s\src\Graphics\src\Graphics.Win2D\Graphics.Win2D.csproj (in 192 ms).
  Restored D:\a\1\s\src\Core\maps\src\Maps.csproj (in 4.56 sec).
  Restored D:\a\1\s\src\Controls\src\Core\Controls.Core.csproj (in 26 ms).
  Restored D:\a\1\s\src\Controls\Maps\src\Controls.Maps.csproj (in 25 ms).
  Restored D:\a\1\s\src\Controls\Foldable\src\Controls.Foldable.csproj (in 26 ms).
  Restored D:\a\1\s\src\BlazorWebView\src\Maui\Microsoft.AspNetCore.Components.WebView.Maui.csproj (in 58 ms).
  Restored D:\a\1\s\src\Controls\tests\TestCases.HostApp\Controls.TestCases.HostApp.csproj (in 5.06 sec).
  3 of 14 projects are up-to-date for restore.
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13817167
  Graphics -> D:\a\1\s\artifacts\bin\Graphics\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13817167
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13817167
  Graphics.Win2D -> D:\a\1\s\artifacts\bin\Graphics.Win2D\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Graphics.Win2D.WinUI.Desktop.dll
  Essentials -> D:\a\1\s\artifacts\bin\Essentials\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Essentials.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13817167
  Core -> D:\a\1\s\artifacts\bin\Core\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13817167
  Maps -> D:\a\1\s\artifacts\bin\Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Maps.dll
  Controls.BindingSourceGen -> D:\a\1\s\artifacts\bin\Controls.BindingSourceGen\Debug\netstandard2.0\Microsoft.Maui.Controls.BindingSourceGen.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13817167
  Controls.Core -> D:\a\1\s\artifacts\bin\Controls.Core\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13817167
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13817167
  Controls.Foldable -> D:\a\1\s\artifacts\bin\Controls.Foldable\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Foldable.dll
  Controls.Xaml -> D:\a\1\s\artifacts\bin\Controls.Xaml\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Xaml.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13817167
  Controls.Maps -> D:\a\1\s\artifacts\bin\Controls.Maps\Debug\net10.0-windows10.0.19041.0\Microsoft.Maui.Controls.Maps.dll
  ##vso[build.updatebuildnumber]10.0.60-ci+azdo.13817167
  Microsoft.AspNetCore.Components.WebView.Maui -> D:\a\1\s\artifacts\bin\Microsoft.AspNetCore.Components.WebView.Maui\Debug\net10.0-windows10.0.19041.0\Microsoft.AspNetCore.Components.WebView.Maui.dll
  Controls.TestCases.HostApp -> D:\a\1\s\artifacts\bin\Controls.TestCases.HostApp\Debug\net10.0-windows10.0.19041.0\win-x64\Controls.TestCases.HostApp.dll

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

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

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
   NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 4/13/2026 11:58:24 AM FixtureSetup for Issue30199(Windows)
>>>>> 4/13/2026 11:58:32 AM Issue30199TimePickerCharacterSpacingShouldApply Start
>>>>> 4/13/2026 11:58:35 AM Issue30199TimePickerCharacterSpacingShouldApply Stop
>>>>> 4/13/2026 11:58:35 AM Log types: 
  Failed Issue30199TimePickerCharacterSpacingShouldApply [2 s]
  Error Message:
   VisualTestUtils.VisualTestFailedException : 
Snapshot different than baseline: Issue30199TimePickerCharacterSpacingShouldApply.png (0.63% difference)
If the correct baseline has changed (this isn't a a bug), then update the baseline image.
See test attachment or download the build artifacts to get the new snapshot file.

More info: https://aka.ms/visual-test-workflow

  Stack Trace:
     at VisualTestUtils.VisualRegressionTester.Fail(String message) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 162
   at VisualTestUtils.VisualRegressionTester.VerifyMatchesSnapshot(String name, ImageSnapshot actualImage, String environmentName, ITestContext testContext) in /_/src/TestUtils/src/VisualTestUtils/VisualRegressionTester.cs:line 123
   at Microsoft.Maui.TestCases.Tests.UITest.<VerifyScreenshot>g__Verify|13_0(String name, <>c__DisplayClass13_0&) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 477
   at Microsoft.Maui.TestCases.Tests.UITest.VerifyScreenshot(String name, Nullable`1 retryDelay, Nullable`1 retryTimeout, Int32 cropLeft, Int32 cropRight, Int32 cropTop, Int32 cropBottom, Double tolerance, Boolean includeTitleBar) in /_/src/Controls/tests/TestCases.Shared.Tests/UITest.cs:line 309
   at Microsoft.Maui.TestCases.Tests.Issues.Issue30199.Issue30199TimePickerCharacterSpacingShouldApply() in /_/src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue30199.cs:line 22
   at System.Reflection.MethodBaseInvoker.InterpretedInvoke_Method(Object obj, IntPtr* args)
   at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)

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

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

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

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

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

Starting test execution, please wait...
A total of 1 test files matched the specified pattern.
D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
NUnit Adapter 4.5.0.0: Test execution started
Running selected tests in D:\a\1\s\artifacts\bin\Controls.TestCases.WinUI.Tests\Debug\net10.0\Controls.TestCases.WinUI.Tests.dll
   NUnit3TestExecutor discovered 1 of 1 NUnit test cases using Current Discovery mode, Non-Explicit run
>>>>> 4/13/2026 12:06:15 PM FixtureSetup for Issue30199(Windows)
>>>>> 4/13/2026 12:06:23 PM Issue30199TimePickerCharacterSpacingShouldApply Start
>>>>> 4/13/2026 12:06:24 PM Issue30199TimePickerCharacterSpacingShouldApply Stop
  Passed Issue30199TimePickerCharacterSpacingShouldApply [1 s]
NUnit Adapter 4.5.0.0: Test execution complete
[xUnit.net 00:00:00.00] xUnit.net VSTest Adapter v2.8.2+699d445a1a (64-bit .NET 10.0.0)
[xUnit.net 00:00:00.12]   Discovering: Controls.TestCases.WinUI.Tests
[xUnit.net 00:00:00.32]   Discovered:  Controls.TestCases.WinUI.Tests

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

📁 Fix files reverted (4 files)
  • eng/pipelines/ci-copilot.yml
  • eng/pipelines/ci-official.yml
  • src/Core/src/Handlers/TimePicker/TimePickerHandler.Windows.cs
  • src/Core/src/Platform/Windows/TimePickerExtensions.cs

@MauiBot MauiBot added the s/agent-changes-requested AI agent recommends changes - found a better alternative or issues label Apr 3, 2026
Copy link
Copy Markdown
Contributor

@kubaflo kubaflo left a comment

Choose a reason for hiding this comment

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

Could you please review the AI's summary?

PureWeen and others added 11 commits April 8, 2026 19:58
Backport of dotnet#34801 to main.

The official pack pipeline doesn't need iOS simulators — it only builds
and packs NuGet packages. The simulator install step is timing out on
macOS agents, blocking BAR build production.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@SubhikshaSf4851
Copy link
Copy Markdown
Contributor Author

@kubaflo I have reviewed the AI summary and the current handler-based approach is correct — WinUI re-creates template children on every visual tree re-entry, making a persistent Loaded subscription the right choice over a one-time lambda.

Copy link
Copy Markdown
Contributor

@kubaflo kubaflo left a comment

Choose a reason for hiding this comment

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

Can you please try this:

public static void UpdateCharacterSpacing(this TimePicker platformTimePicker, ITimePicker timePicker)
{
    platformTimePicker.CharacterSpacing = timePicker.CharacterSpacing.ToEm();
    if (!platformTimePicker.IsLoaded)
    {
        RoutedEventHandler? onLoaded = null;
        onLoaded = (s, e) =>
        {
            platformTimePicker.Loaded -= onLoaded;
            UpdateCharacterSpacingInTimePicker(platformTimePicker);
        };
        platformTimePicker.Loaded += onLoaded;
        return;
    }
    UpdateCharacterSpacingInTimePicker(platformTimePicker);
}

@SubhikshaSf4851
Copy link
Copy Markdown
Contributor Author

Can you please try this:

public static void UpdateCharacterSpacing(this TimePicker platformTimePicker, ITimePicker timePicker)
{
    platformTimePicker.CharacterSpacing = timePicker.CharacterSpacing.ToEm();
    if (!platformTimePicker.IsLoaded)
    {
        RoutedEventHandler? onLoaded = null;
        onLoaded = (s, e) =>
        {
            platformTimePicker.Loaded -= onLoaded;
            UpdateCharacterSpacingInTimePicker(platformTimePicker);
        };
        platformTimePicker.Loaded += onLoaded;
        return;
    }
    UpdateCharacterSpacingInTimePicker(platformTimePicker);
}

@kubaflo As suggested I have modified the changes

@kubaflo kubaflo changed the base branch from main to inflight/current April 13, 2026 17:44
@kubaflo kubaflo merged commit 0e6c223 into dotnet:inflight/current Apr 13, 2026
36 checks passed
PureWeen pushed a commit that referenced this pull request Apr 14, 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. !!!!!!!
-->

### Root Cause:
The UpdateCharacterSpacing method didn't apply spacing to the individual
text blocks in TimePicker

### Description of Change 
Enhanced the UpdateCharacterSpacing method to apply CharacterSpacing to
individual text blocks (HourTextBlock, MinuteTextBlock, and
PeriodTextBlock) within the TimePicker. This ensures the property works
correctly even when the control is loaded asynchronously.

<!-- Enter description of the fix in this section -->

### Issues Fixed

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

Fixes #30199 

### Tested the behaviour in the following platforms

- [x] Windows
- [x] Android
- [x] iOS
- [ ] Mac

### Screenshot

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <img width="1217" height="915" alt="beforeFix30199"
src="https://github.com/user-attachments/assets/0b955bf7-5e75-48d3-8455-3fe0cf2c0c5b">
| <img width="1261" height="946" alt="Screenshot 2025-07-10 155258"
src="https://github.com/user-attachments/assets/5d2d8a34-fb01-4c58-9fef-be3ad10b7cb0">
|

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

---------
devanathan-vaithiyanathan pushed a commit to Tamilarasan-Paranthaman/maui that referenced this pull request Apr 21, 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. !!!!!!!
-->

### Root Cause:
The UpdateCharacterSpacing method didn't apply spacing to the individual
text blocks in TimePicker

### Description of Change 
Enhanced the UpdateCharacterSpacing method to apply CharacterSpacing to
individual text blocks (HourTextBlock, MinuteTextBlock, and
PeriodTextBlock) within the TimePicker. This ensures the property works
correctly even when the control is loaded asynchronously.

<!-- Enter description of the fix in this section -->

### Issues Fixed

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

Fixes dotnet#30199 

### Tested the behaviour in the following platforms

- [x] Windows
- [x] Android
- [x] iOS
- [ ] Mac

### Screenshot

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <img width="1217" height="915" alt="beforeFix30199"
src="https://github.com/user-attachments/assets/0b955bf7-5e75-48d3-8455-3fe0cf2c0c5b">
| <img width="1261" height="946" alt="Screenshot 2025-07-10 155258"
src="https://github.com/user-attachments/assets/5d2d8a34-fb01-4c58-9fef-be3ad10b7cb0">
|

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

---------
PureWeen pushed a commit that referenced this pull request Apr 22, 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. !!!!!!!
-->

### Root Cause:
The UpdateCharacterSpacing method didn't apply spacing to the individual
text blocks in TimePicker

### Description of Change 
Enhanced the UpdateCharacterSpacing method to apply CharacterSpacing to
individual text blocks (HourTextBlock, MinuteTextBlock, and
PeriodTextBlock) within the TimePicker. This ensures the property works
correctly even when the control is loaded asynchronously.

<!-- Enter description of the fix in this section -->

### Issues Fixed

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

Fixes #30199 

### Tested the behaviour in the following platforms

- [x] Windows
- [x] Android
- [x] iOS
- [ ] Mac

### Screenshot

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <img width="1217" height="915" alt="beforeFix30199"
src="https://github.com/user-attachments/assets/0b955bf7-5e75-48d3-8455-3fe0cf2c0c5b">
| <img width="1261" height="946" alt="Screenshot 2025-07-10 155258"
src="https://github.com/user-attachments/assets/5d2d8a34-fb01-4c58-9fef-be3ad10b7cb0">
|

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

---------
PureWeen pushed a commit that referenced this pull request Apr 28, 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. !!!!!!!
-->

### Root Cause:
The UpdateCharacterSpacing method didn't apply spacing to the individual
text blocks in TimePicker

### Description of Change 
Enhanced the UpdateCharacterSpacing method to apply CharacterSpacing to
individual text blocks (HourTextBlock, MinuteTextBlock, and
PeriodTextBlock) within the TimePicker. This ensures the property works
correctly even when the control is loaded asynchronously.

<!-- Enter description of the fix in this section -->

### Issues Fixed

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

Fixes #30199 

### Tested the behaviour in the following platforms

- [x] Windows
- [x] Android
- [x] iOS
- [ ] Mac

### Screenshot

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <img width="1217" height="915" alt="beforeFix30199"
src="https://github.com/user-attachments/assets/0b955bf7-5e75-48d3-8455-3fe0cf2c0c5b">
| <img width="1261" height="946" alt="Screenshot 2025-07-10 155258"
src="https://github.com/user-attachments/assets/5d2d8a34-fb01-4c58-9fef-be3ad10b7cb0">
|

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

---------
PureWeen pushed a commit that referenced this pull request Apr 29, 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. !!!!!!!
-->

### Root Cause:
The UpdateCharacterSpacing method didn't apply spacing to the individual
text blocks in TimePicker

### Description of Change 
Enhanced the UpdateCharacterSpacing method to apply CharacterSpacing to
individual text blocks (HourTextBlock, MinuteTextBlock, and
PeriodTextBlock) within the TimePicker. This ensures the property works
correctly even when the control is loaded asynchronously.

<!-- Enter description of the fix in this section -->

### Issues Fixed

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

Fixes #30199 

### Tested the behaviour in the following platforms

- [x] Windows
- [x] Android
- [x] iOS
- [ ] Mac

### Screenshot

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <img width="1217" height="915" alt="beforeFix30199"
src="https://github.com/user-attachments/assets/0b955bf7-5e75-48d3-8455-3fe0cf2c0c5b">
| <img width="1261" height="946" alt="Screenshot 2025-07-10 155258"
src="https://github.com/user-attachments/assets/5d2d8a34-fb01-4c58-9fef-be3ad10b7cb0">
|

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

---------
github-actions Bot pushed a commit that referenced this pull request May 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. !!!!!!!
-->

### Root Cause:
The UpdateCharacterSpacing method didn't apply spacing to the individual
text blocks in TimePicker

### Description of Change 
Enhanced the UpdateCharacterSpacing method to apply CharacterSpacing to
individual text blocks (HourTextBlock, MinuteTextBlock, and
PeriodTextBlock) within the TimePicker. This ensures the property works
correctly even when the control is loaded asynchronously.

<!-- Enter description of the fix in this section -->

### Issues Fixed

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

Fixes #30199 

### Tested the behaviour in the following platforms

- [x] Windows
- [x] Android
- [x] iOS
- [ ] Mac

### Screenshot

| Before Issue Fix | After Issue Fix |
|----------|----------|
| <img width="1217" height="915" alt="beforeFix30199"
src="https://github.com/user-attachments/assets/0b955bf7-5e75-48d3-8455-3fe0cf2c0c5b">
| <img width="1261" height="946" alt="Screenshot 2025-07-10 155258"
src="https://github.com/user-attachments/assets/5d2d8a34-fb01-4c58-9fef-be3ad10b7cb0">
|

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

---------
@github-actions github-actions Bot locked and limited conversation to collaborators May 14, 2026
@kubaflo kubaflo added s/agent-gate-passed AI verified tests catch the bug (fail without fix, pass with fix) s/agent-fix-implemented PR author implemented the agent suggested fix labels May 20, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Windows] TimePicker CharacterSpacing Property Not Working on Windows

9 participants