Repository navigation
[main] Remove accidental net11 changes from #37995 - #38155
Conversation
Restore main to its pre-merge content while retaining only the intended ListView test cleanup from #37995. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 3391bd85-62d2-4de0-84c7-5952156ea5bb
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 38155Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 38155" |
|
Azure Pipelines: Successfully started running 1 pipeline(s). There may be pipelines that require an authorized user to comment /azp run to run. |
Skill Validation Results
|
|
@dalexsoto stamp |
There was a problem hiding this comment.
🔵 Needs a closer look
The PR is a very large cross-cutting revert and includes multiple confirmed runtime/CI-breaking issues (null-safety regressions and exit-code propagation).
Pull request overview
This PR aims to remove unintended net11.0-branch payload that was accidentally merged into main via #37995, while preserving the intended dedicated ListView test cleanup and subsequent legitimate main changes.
Changes:
- Adjusts numerous source, test, and build/pipeline files to align
mainback to the expected baseline after the accidentalnet11.0history merge. - Updates templates and samples (XAML headers/xmlns, host options, minor behavior tweaks) as part of restoring the corrected tree state.
- Removes/reclassifies various test artifacts and supporting infrastructure impacted by the accidental merge.
File summaries
| File | Description |
|---|---|
| src/Workload/Microsoft.NET.Sdk.Maui.Manifest/WorkloadManifest.in.json | Adds Controls.Compatibility to workload manifest |
| src/TestUtils/src/DeviceTests.Runners/VisualRunner/DeviceRunner.cs | Removes obsolete-warning pragmas around XamlCompilation |
| src/Templates/src/templates/maui-window-xaml/NewWindow1.xaml | Adds XML header + xmlns declarations |
| src/Templates/src/templates/maui-resourcedictionary-xaml/Dictionary1.xaml | Adds XML header + xmlns declarations |
| src/Templates/src/templates/maui-mobile/Resources/Styles/Colors.xaml | Adds XML header + xmlns declarations |
| src/Templates/src/templates/maui-mobile/AppShell.xaml | Adds XML header + xmlns declarations |
| src/Templates/src/templates/maui-mobile/App.xaml | Adds XML header + xmlns declarations |
| src/Templates/src/templates/maui-mobile/.template.config/ide.host.json | Removes hidden Avalonia-related options |
| src/Templates/src/templates/maui-contentview-xaml/NewContent1.xaml | Adds XML header + xmlns declarations |
| src/Templates/src/templates/maui-contentpage-xaml/NewPage1.xaml | Adds XML header + xmlns declarations |
| src/Templates/src/templates/maui-blazor/MainPage.xaml | Adds XML header + xmlns declarations |
| src/Templates/src/templates/maui-blazor/Components/Layout/NavMenu.razor.js | Removes nav toggle JS file |
| src/Templates/src/templates/maui-blazor/App.xaml | Adds XML header + xmlns declarations |
| src/Templates/src/templates/maui-blazor/.template.config/dotnetcli.host.json | Adds hidden Empty parameter |
| src/Templates/src/templates/maui-blazor-solution/MauiApp.1.Web/Components/Layout/ReconnectModal.razor.js | Changes reconnect fallback behavior to reload |
| src/Templates/src/templates/maui-blazor-solution/.template.config/dotnetcli.host.json | Adds hidden Empty parameter |
| src/Microsoft.Maui.TestUtils.DeviceTests.Runners.props | Removes MauiTestProject property |
| src/Graphics/src/Graphics/Graphics.csproj | Sets IsTrimmable to false |
| src/Essentials/test/DeviceTests/EssentialsStaticStateCollection.cs | Removes xUnit collection definition |
| src/Essentials/src/Vibration/Vibration.shared.cs | Simplifies Default implementation initialization |
| src/Essentials/src/Types/Location.shared.cs | Removes Location TypeConverter attribute |
| src/Essentials/src/TextToSpeech/TextToSpeech.tizen.cs | Adjusts locale/language selection logic |
| src/Essentials/src/Share/Share.shared.cs | Simplifies Default implementation initialization |
| src/Essentials/src/SecureStorage/SecureStorage.android.cs | Makes helper method static |
| src/Essentials/src/Permissions/Permissions.macos.cs | Changes Info.plist key lookup logic |
| src/Essentials/src/NativeMethods.txt | Removes native methods text list |
| src/Essentials/src/NativeMethods.json | Removes CsWin32 config file |
| src/Essentials/src/Geocoding/Geocoding.tizen.cs | Changes implementation interface |
| src/Essentials/src/Email/Email.shared.cs | Simplifies Default implementation initialization |
| src/Essentials/src/DeviceInfo/DeviceInfo.shared.cs | Simplifies Current implementation initialization |
| src/Essentials/src/Contacts/Contacts.shared.cs | Simplifies Default implementation initialization |
| src/Essentials/src/Compass/Compass.shared.cs | Simplifies Default implementation initialization |
| src/Essentials/src/Browser/Browser.shared.cs | Simplifies Default implementation initialization |
| src/Essentials/src/AppInfo/AppInfo.windows.cs | Inlines package name computation |
| src/Essentials/src/AppInfo/AppInfo.tizen.cs | Inlines package name computation |
| src/Essentials/src/AppInfo/AppInfo.shared.cs | Simplifies Current implementation initialization |
| src/Essentials/src/AppInfo/AppInfo.netstandard.cs | Removes unused helper |
| src/Essentials/src/AppInfo/AppInfo.android.cs | Inlines package name computation |
| src/Essentials/samples/Samples/View/PasskeysPage.xaml.cs | Removes PasskeysPage code-behind |
| src/Essentials/samples/Samples/Platforms/MacCatalyst/Info.plist | Removes a comment line |
| src/Essentials/samples/Samples/Platforms/Android/AndroidManifest.xml | Removes POST_NOTIFICATIONS permission |
| src/Essentials/samples/Samples/App.xaml.cs | Removes obsolete-warning pragmas around XamlCompilation |
| src/Essentials/samples/Samples/.gitignore | Removes passkeys-local ignore rules |
| src/Essentials/samples/Samples.Server.Passkeys/appsettings.json | Removes server appsettings |
| src/Core/tests/UnitTests/MainThreadStaticStateCollection.cs | Removes xUnit collection definition |
| src/Core/tests/UnitTests/Hosting/HostBuilderServicesTests.cs | Switches to string-named collection |
| src/Core/tests/DeviceTests/TestCategory.cs | Removes Lifecycle category constant |
| src/Core/tests/DeviceTests/Services/EssentialsStaticStateCollection.cs | Removes xUnit collection definition |
| src/Core/tests/DeviceTests/Core.DeviceTests.csproj | Lowers Android SupportedOSPlatformVersion |
| src/Core/tests/DeviceTests.Shared/Stubs/WindowStub.cs | Removes StatusBarTheme from stub |
| src/Core/tests/DeviceTests.Shared/Stubs/ContextStub.cs | Removes Android Activity service stub |
| src/Core/src/Platform/Windows/TextBlockExtensions.cs | Changes LineHeight update behavior |
| src/Core/src/Platform/Windows/MauiPasswordTextBox.cs | Makes AutomationPeer internal (NET11 TODO) |
| src/Core/src/Platform/iOS/MauiWebViewNavigationDelegate.cs | Changes URL extraction for navigating callback |
| src/Core/src/Platform/iOS/MauiTextView.cs | Adjusts placeholder font assignment |
| src/Core/src/Platform/iOS/LabelExtensions.cs | Removes obsolete-warning pragmas |
| src/Core/src/Platform/iOS/Culture.cs | Adjusts country code nullability |
| src/Core/src/Platform/iOS/ButtonExtensions.cs | Makes UpdateBackground internal (NET11 TODO) |
| src/Core/src/Platform/iOS/AttributedStringExtensions.cs | Removes null-forgiving operator |
| src/Core/src/Platform/Android/MauiMaterialTimePicker.cs | Makes type internal (NET11 TODO) |
| src/Core/src/Platform/Android/MauiMaterialContextThemeWrapper.cs | Makes type internal |
| src/Core/src/Platform/Android/MauiHybridWebViewClient.cs | Adds trimming/dynamic-code attributes |
| src/Core/src/Platform/Android/MaterialActivityIndicator.cs | Makes type internal (NET11 TODO) |
| src/Core/src/Platform/Android/Material3Controls/MauiMaterialTextView.cs | Makes type internal (NET11 TODO) |
| src/Core/src/Platform/Android/Material3Controls/MauiMaterialDatePicker.cs | Makes type internal (NET11 TODO) |
| src/Core/src/ImageSources/ImageSourcePaint.cs | Removes interface implementation |
| src/Core/src/Handlers/Window/WindowHandler.cs | Removes StatusBarTheme mapping |
| src/Core/src/Handlers/WebView/WebViewHandler.Windows.cs | Makes MapBackground internal (NET11 TODO) |
| src/Core/src/Handlers/WebView/WebViewHandler.cs | Adds Android mapper entries for clients |
| src/Core/src/Handlers/View/ViewHandlerOfT.cs | Removes generic handler interface from base list |
| src/Core/src/Handlers/View/ViewHandler.iOS.cs | Removes connect-time safe-area guard |
| src/Core/src/Handlers/Switch/SwitchHandler2.Android.cs | Makes handler internal (NET11 TODO) |
| src/Core/src/Handlers/Stepper/StepperHandler.iOS.cs | Makes MapFlowDirection internal (NET11 TODO) |
| src/Core/src/Handlers/ShapeView/ShapeViewHandler.cs | Makes MapFlowDirection internal (NET11 TODO) |
| src/Core/src/Handlers/SearchBar/SearchBarHandler2.Android.cs | Makes handler internal (NET11 TODO) |
| src/Core/src/Handlers/RadioButton/RadioButtonHandler2.Android.cs | Makes handler internal (NET11 TODO) |
| src/Core/src/Handlers/ProgressBar/ProgressBarHandler2.Android.cs | Makes handler internal (NET11 TODO) |
| src/Core/src/Handlers/Picker/PickerHandler2.Android.cs | Makes handler internal (NET11 TODO) |
| src/Core/src/Handlers/Picker/PickerHandler.Android.cs | Reduces dialog field visibility |
| src/Core/src/Handlers/Layout/LayoutHandler.cs | Removes generic handler interface from base list |
| src/Core/src/Handlers/Label/LabelHandler.Android.cs | Makes LabelHandler2 internal (NET11 TODO) |
| src/Core/src/Handlers/Image/ImageHandler2.Android.cs | Makes handler internal (NET11 TODO) |
| src/Core/src/Handlers/Entry/EntryHandler2.Android.cs | Makes handler internal (NET11 TODO) |
| src/Core/src/Handlers/Element/ElementHandlerOfT.cs | Removes generic handler interface from base list |
| src/Core/src/Handlers/Editor/EditorHandler2.Android.cs | Makes handler internal (NET11 TODO) |
| src/Core/src/Handlers/Button/ButtonHandler.iOS.cs | Makes MapBackground internal (NET11 TODO) |
| src/Core/src/Handlers/ActivityIndicator/ActivityIndicatorHandler.Android.cs | Makes ActivityIndicatorHandler2 internal (NET11 TODO) |
| src/Core/src/ActivationState.cs | Adjusts persisted-state extraction logic |
| src/Core/maps/src/Properties/AssemblyInfo.cs | Removes InternalsVisibleTo assembly attribute |
| src/Core/maps/src/Handlers/MapPin/MapPinHandler.Tizen.cs | Removes MapImageSource stub |
| src/Core/maps/src/Handlers/MapPin/MapPinHandler.Standard.cs | Removes MapImageSource stub |
| src/Core/maps/src/Handlers/MapPin/MapPinHandler.cs | Removes ImageSource mapping from mapper |
| src/Controls/tests/Xaml.UnitTests/AssemblyInfoTests.cs | Fixes expected assembly major version |
| src/Controls/tests/Xaml.Benchmarks/Program.cs | Removes SourceGen_NoLazyRD benchmark |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue33407.cs | Adjusts screenshot capture parameters |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue32983.cs | Removes per-test reset override |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue28604.cs | Removes tolerance/retry from screenshot |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue20288.cs | Removes internet connectivity guard |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/Issue18896.cs | Reduces screenshot retry timeout |
| src/Controls/tests/TestCases.Shared.Tests/Tests/Issues/_GalleryUITest.cs | Removes ready-element usage on gallery navigation |
| src/Controls/tests/TestCases.Shared.Tests/Tests/FeatureMatrix/EntryFeatureTests.cs | Removes iOS keyboard assertion before screenshot |
| src/Controls/tests/TestCases.HostApp/MauiProgram.cs | Removes Issue34392 handler registration |
| src/Controls/tests/TestCases.HostApp/Issues/Issue32983.cs | Switches CollectionView2 to CollectionView |
| src/Controls/tests/TestCases.HostApp/FeatureMatrix/Slider/SliderControlPage.xaml | Removes AutomationId from SliderGrid |
| src/Controls/tests/SourceGen.UnitTests/XamlHotReloadTestsCollection.cs | Removes xUnit collection definition |
| src/Controls/tests/DeviceTests/Xaml/RadioButtonUsing.xaml.cs | Removes obsolete-warning pragmas around XamlCompilation |
| src/Controls/tests/DeviceTests/TestCategory.cs | Normalizes Map category constant |
| src/Controls/tests/DeviceTests/Elements/Toolbar/ToolbarTests.cs | Adds NavigationRenderer alias import |
| src/Controls/tests/DeviceTests/Elements/CarouselView/CarouselViewTests.iOS.cs | Removes delay before GC assertions |
| src/Controls/tests/DeviceTests/ControlsHandlerTestBase.Android.cs | Removes override-ability of helper |
| src/Controls/tests/Core.UnitTests/Layouts/LayoutTests.cs | Broadens NSubstitute service matching |
| src/Controls/tests/Core.UnitTests/Gestures/TapGestureRecognizerTests.cs | Removes null-sender guard test |
| src/Controls/src/SourceGen/AnalyzerReleases.Unshipped.md | Removes analyzer release entry |
| src/Controls/src/Core/StreamWrapper.cs | Switches warning logging to ILogger (via MauiContext) |
| src/Controls/src/Core/SearchBar/SearchBar.Android.cs | Makes Material3 overload internal (NET11 TODO) |
| src/Controls/src/Core/Platform/Tizen/GestureDetector.cs | Removes LongPress handler mapping |
| src/Controls/src/Core/Platform/iOS/DragAndDropDelegate.cs | Switches warning logging to ILogger (via MauiContext) |
| src/Controls/src/Core/Platform/GestureManager/GesturePlatformManager.Tizen.cs | Changes interface implemented to IDisposable |
| src/Controls/src/Core/Platform/GestureManager/GesturePlatformManager.Standard.cs | Changes interface implemented to IDisposable |
| src/Controls/src/Core/Platform/Android/DragAndDropGestureHandler.cs | Switches warning logging to ILogger (via MauiContext) |
| src/Controls/src/Core/Platform/AlertManager/AlertManager.Windows.cs | Updates obsolete TODO comment wording |
| src/Controls/src/Core/Platform/AlertManager/AlertManager.Standard.cs | Updates obsolete TODO comment wording |
| src/Controls/src/Core/Platform/AlertManager/AlertManager.Android.cs | Updates obsolete TODO comment wording |
| src/Controls/src/Core/LegacyLayouts/Layout.cs | Removes cached InvalidationEventArgs usage |
| src/Controls/src/Core/Layout/Layout.cs | Updates SafeAreaEdges default-value docs |
| src/Controls/src/Core/Label/Label.iOS.cs | Always maps formatting (removes connect guard) |
| src/Controls/src/Core/Internals/ICache.cs | Removes internal ICache interface |
| src/Controls/src/Core/Editor/Editor.Android.cs | Makes Material3 overload internal (NET11 TODO) |
| src/Controls/src/Core/ContentPage/ContentPage.cs | Updates SafeAreaEdges default-value docs |
| src/Controls/src/Core/Compatibility/Android/FontNamedSizeService.cs | Switches warning logging to ILogger (via MauiContext) |
| src/Controls/src/Core/CheckBox/CheckBox.cs | Adds ElementHandler attribute |
| src/Controls/samples/Controls.Sample/Properties/launchSettings.json | Changes Windows profile commandName |
| src/Controls/samples/Controls.Sample/Pages/PlatformSpecifics/iOS/iOSTimePickerPage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/PlatformSpecifics/iOS/iOSPickerPage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/PlatformSpecifics/iOS/iOSDatePickerPage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/PlatformSpecifics/Android/AndroidTitleViewPage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/Others/TemplatePage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/Layouts/ScrollViewPages/ScrollViewTemplatePage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/Core/WindowTitleBar.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/Core/SemanticsPage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/Core/ApplicationControlPage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/Controls/ShapesPage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/Controls/ProgressBarPage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/Controls/MapsGalleries/PolygonsGallery.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/Controls/CollectionViewGalleries/ExampleTemplates.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/Controls/CheckBoxPage.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Pages/AppShell.xaml.cs | Makes sender non-nullable |
| src/Controls/samples/Controls.Sample/Main.razor | Sets PreferExactMatches on Router |
| src/Controls/samples/Controls.Sample.Sandbox/MainPage.xaml | Adds xmlns declarations |
| src/Controls/samples/Controls.Sample.Profiling/Startup.cs | Adds XamlCompilation assembly attribute |
| src/Controls/Maps/src/HandlerImpl/Pin.Impl.cs | Removes explicit IMapPin.ImageSource impl |
| src/Controls/Maps/src/HandlerImpl/MapElement.Impl.cs | Removes explicit Clicked impl |
| src/Compatibility/Material/src/iOS/IMaterialEntryRenderer.cs | Adds new Material iOS interface |
| src/Compatibility/Material/src/iOS/FormsMaterial.cs | Adds FormsMaterial.Init entry point |
| src/Compatibility/Material/src/Android/Resources/values-v21/styles.xml | Adds Android v21 styles resource |
| src/Compatibility/Material/src/Android/Resources/color/white_disabled_material.xml | Adds color selector resource |
| src/Compatibility/Material/src/Android/Resources/color-v23/white_disabled_material.xml | Adds v23 color selector resource |
| src/Compatibility/Maps/src/WPF/Properties/Settings.settings | Adds WPF Settings.settings |
| src/Compatibility/Maps/src/WPF/Properties/AssemblyInfo.cs | Adds WPF renderer export assembly info |
| src/Compatibility/Maps/src/Windows/Properties/AssemblyInfo.cs | Adds Windows/UWP assembly info stub |
| src/Compatibility/Maps/src/Windows/Directory.Build.targets | Adds Windows build target imports |
| src/Compatibility/Maps/src/Windows/Directory.Build.Props | Adds Windows build props imports |
| src/Compatibility/Maps/src/Tizen/Properties/AssemblyInfo.cs | Adds Tizen renderer export assembly info |
| src/Compatibility/Maps/src/MacOS/Properties/AssemblyInfo.cs | Adds macOS renderer export assembly info |
| src/Compatibility/Maps/src/iOS/Properties/AssemblyInfo.cs | Adds iOS renderer export assembly info |
| src/Compatibility/Maps/src/GTK/Location.cs | Adds GTK location model |
| src/Compatibility/Core/tests/iOS/Properties/AssemblyInfo.cs | Adds Preserve attribute for tests |
| src/Compatibility/Core/tests/Compatibility.UnitTests/ButtonHandlerStub.cs | Adds handler stub for compatibility tests |
| src/Compatibility/Core/tests/Android/Resources/values/styles.xml | Adds Android styles for tests |
| src/Compatibility/Core/tests/Android/Properties/AssemblyInfo.cs | Adds Preserve attribute for tests |
| src/Compatibility/Core/src/WPF/PlatformEffect.cs | Adds WPF PlatformEffect type |
| src/Compatibility/Core/src/WPF/ICellRenderer.cs | Adds WPF ICellRenderer |
| src/Compatibility/Core/src/WPF/Controls/FormsElementIcon.cs | Adds WPF FormsElementIcon control |
| src/Compatibility/Core/src/WPF/Controls/FormsContentPage.cs | Adds WPF FormsContentPage control |
| src/Compatibility/Core/src/Windows/WindowsPlatform.cs | Adds obsolete WindowsPlatform wrapper |
| src/Compatibility/Core/src/Windows/Win2DNotImplementedException.cs | Adds Win2D NotImplemented exception |
| src/Compatibility/Core/src/Windows/ViewToRendererConverter.cs | Adds Windows ViewToRendererConverter |
| src/Compatibility/Core/src/Windows/IVisualNativeElementRenderer.cs | Adds Windows renderer interface |
| src/Compatibility/Core/src/Windows/IToolbarProvider.cs | Adds toolbar provider interface |
| src/Compatibility/Core/src/Windows/IToolBarForegroundBinder.cs | Adds toolbar foreground binder interface |
| src/Compatibility/Core/src/Windows/ITitleViewProvider.cs | Adds title view provider interface |
| src/Compatibility/Core/src/Windows/ITitleProvider.cs | Adds title provider interface |
| src/Compatibility/Core/src/Windows/ITitleIconProvider.cs | Adds title icon provider interface |
| src/Compatibility/Core/src/Windows/IImageVisualElementRenderer.cs | Adds image renderer interface |
| src/Compatibility/Core/src/Windows/Flags.cs | Adds compatibility Flags stub |
| src/Compatibility/Core/src/Windows/Directory.Build.targets | Adds Windows build target imports |
| src/Compatibility/Core/src/Windows/Directory.Build.Props | Adds Windows build props imports |
| src/Compatibility/Core/src/Windows/DefaultRenderer.cs | Adds obsolete DefaultRenderer |
| src/Compatibility/Core/src/Tizen/VisualElementRendererFlags.cs | Adds Tizen renderer flags enum |
| src/Compatibility/Core/src/Tizen/TizenTitleBarVisibility.cs | Adds Tizen title bar visibility enum |
| src/Compatibility/Core/src/Tizen/Renderers/ILayoutRenderer.cs | Adds obsolete Tizen layout renderer interface |
| src/Compatibility/Core/src/Tizen/Properties/AssemblyInfo.cs | Adds Preserve + InternalsVisibleTo |
| src/Compatibility/Core/src/Tizen/Flags.cs | Adds Tizen compatibility flags |
| src/Compatibility/Core/src/Tizen/EmbeddedFontLoader.cs | Adds Tizen compatibility embedded font loader |
| src/Compatibility/Core/src/MacOS/Renderers/DefaultRenderer.cs | Adds macOS DefaultRenderer |
| src/Compatibility/Core/src/MacOS/Controls/ScrollViewScrollChangedEventArgs.cs | Adds macOS scroll changed args |
| src/Compatibility/Core/src/MacOS/Cells/NSTableViewCellStyle.cs | Adds macOS cell style enum |
| src/Compatibility/Core/src/iOS/Renderers/ElementSelectedEventArgs.cs | Adds iOS ElementSelectedEventArgs |
| src/Compatibility/Core/src/iOS/Properties/AssemblyInfo.cs | Adds InternalsVisibleTo + metadata |
| src/Compatibility/Core/src/iOS/iOSAppIndexingProvider.cs | Adds iOS app indexing provider |
| src/Compatibility/Core/src/iOS/Flags.cs | Adds iOS compatibility Flags stub |
| src/Compatibility/Core/src/iOS/CollectionView/ILoopItemsViewSource.cs | Adds iOS loop source interface |
| src/Compatibility/Core/src/iOS/_IsIncrementalBuild | Adds incremental build marker file |
| src/Compatibility/Core/src/GTK/webkit-sharp.dll.config | Adds GTK dllmap config |
| src/Compatibility/Core/src/GTK/Renderers/IToolbarTracker.cs | Adds GTK toolbar tracker interface |
| src/Compatibility/Core/src/GTK/Renderers/IPageControl.cs | Adds GTK page control interface |
| src/Compatibility/Core/src/GTK/RendererFactory.cs | Adds GTK renderer factory |
| src/Compatibility/Core/src/GTK/PlatformRenderer.cs | Adds GTK platform renderer |
| src/Compatibility/Core/src/GTK/PlatformEffect.cs | Adds GTK PlatformEffect |
| src/Compatibility/Core/src/GTK/PlatformConfigurationExtensions.cs | Adds GTK platform config extensions |
| src/Compatibility/Core/src/GTK/Libs/webkit-sharp/README.txt | Adds upstream link reference |
| src/Compatibility/Core/src/GTK/Libs/gtk-sharp/README.txt | Adds upstream link reference |
| src/Compatibility/Core/src/GTK/IVisualNativeElementRenderer.cs | Adds GTK native renderer interface |
| src/Compatibility/Core/src/GTK/IDesiredSizeProvider.cs | Adds GTK desired size provider |
| src/Compatibility/Core/src/GTK/Extensions/GtkRectangleExtensions.cs | Adds GTK rectangle extensions |
| src/Compatibility/Core/src/GTK/ExportImageSourceHandlerAttribute.cs | Adds GTK export attribute |
| src/Compatibility/Core/src/GTK/ExportCellAttribute.cs | Adds GTK export attribute |
| src/Compatibility/Core/src/GlobalNamespaces.cs | Adds global using declarations |
| src/Compatibility/Core/src/AppHostBuilderExtensions.Standard.cs | Adds compatibility lifecycle hook stub |
| src/Compatibility/Core/src/Android/VisualElementRendererFlags.cs | Adds Android renderer flags enum |
| src/Compatibility/Core/src/Android/ViewInitializedEventArgs.cs | Adds Android view initialized args |
| src/Compatibility/Core/src/Android/Renderers/ObjectJavaBox.cs | Adds Java boxing helper |
| src/Compatibility/Core/src/Android/Renderers/IPopupTrigger.cs | Adds popup trigger interface |
| src/Compatibility/Core/src/Android/Renderers/IImageSourceHandler.cs | Adds image source handler interface |
| src/Compatibility/Core/src/Android/Renderers/IDescendantFocusToggler.cs | Adds focus toggler interface |
| src/Compatibility/Core/src/Android/Renderers/ElementSelectedEventArgs.cs | Adds Android ElementSelectedEventArgs |
| src/Compatibility/Core/src/Android/OnMeasureDelegate.cs | Adds on-measure delegate |
| src/Compatibility/Core/src/Android/OnLayoutDelegate.cs | Adds on-layout delegate |
| src/Compatibility/Core/src/Android/IStepperRenderer.cs | Adds stepper renderer interface |
| src/Compatibility/Core/src/Android/IPlatformLayout.cs | Adds platform layout interface |
| src/Compatibility/Core/src/Android/IPickerRenderer.cs | Adds picker renderer interface |
| src/Compatibility/Core/src/Android/ILayoutChanges.cs | Adds layout changes interface |
| src/Compatibility/Core/src/Android/IDeviceInfoProvider.cs | Adds device info provider interface |
| src/Compatibility/Core/src/Android/IButtonLayoutRenderer.cs | Adds button layout renderer interface |
| src/Compatibility/Core/src/Android/GetDesiredSizeDelegate.cs | Adds desired-size delegate |
| src/Compatibility/Core/src/Android/Flags.cs | Adds Android compatibility flags |
| src/Compatibility/Core/src/Android/AppCompat/CheckBoxRenderer.cs | Adds obsolete AppCompat renderer wrapper |
| src/Compatibility/Core/src/Android/AndroidTitleBarVisibility.cs | Adds Android title bar visibility enum |
| src/Compatibility/Core/src/Android/AndroidApplicationLifecycleState.cs | Adds Android lifecycle state enum |
| src/BlazorWebView/src/SharedSource/WebView2WebViewManager.cs | Changes WebView2 control type alias |
| src/BlazorWebView/src/SharedSource/Log.cs | Removes a LoggerMessage entry |
| Microsoft.Maui.BuildTasks.slnf | Removes HybridWebViewSourceGen project reference |
| eng/Tools.props | Removes SkipInitInternalTooling guard |
| eng/pipelines/device-tests.yml | Switches tfm default to net10.0 |
| eng/pipelines/common/sdk-insertion.yml | Updates comment about nuget drop source |
| eng/pipelines/common/device-tests-steps.yml | Sets useCoreClr default false |
| eng/pipelines/ci-copilot.yml | Hardcodes mac pool ImageOverride demand |
| eng/devices/devices-shared.cake | Defaults targetFrameworkVersion to net10.0 |
| eng/common/templates/vmr-build-pr.yml | Adjusts VMR repo endpoint configuration |
| eng/common/templates/variables/pool-providers.yml | Updates commented windows image demand |
| eng/common/templates/steps/component-governance.yml | Adds wrapper template for component governance |
| eng/common/templates/jobs/codeql-build.yml | Adds wrapper template for CodeQL build |
| eng/common/templates-official/variables/sdl-variables.yml | Adds SDL variable definitions |
| eng/common/templates-official/variables/pool-providers.yml | Updates commented windows pool image |
| eng/common/templates-official/steps/publish-pipeline-artifacts.yml | Tweaks sbomEnabled condition and drops isProduction |
| eng/common/templates-official/steps/component-governance.yml | Adds official wrapper for component governance |
| eng/common/templates-official/jobs/codeql-build.yml | Adds official wrapper for CodeQL build |
| eng/common/sdl/packages.config | Adds Guardian CLI package reference |
| eng/common/sdk-task.sh | Updates help text for task directory name |
| eng/common/post-build/nuget-verification.ps1 | Removes UseBasicParsing from Invoke-WebRequest |
| eng/common/pipeline-logging-functions.ps1 | Changes telemetry error message prefix |
| eng/common/msbuild.sh | Forces node_reuse=false on CI |
| eng/common/msbuild.ps1 | Forces nodeReuse=false on CI |
| eng/common/internal-feed-operations.sh | Changes arg-parsing loop condition |
| eng/common/internal-feed-operations.ps1 | Removes UseBasicParsing from Invoke-WebRequest |
| eng/common/dotnet.sh | Changes args-present condition |
| eng/common/dotnet.ps1 | Removes explicit ExitWithExitCode propagation |
| eng/common/AGENTS.md | Removes Arcade provenance documentation file |
| eng/build.sh | Removes stray blank line |
| eng/Build.props | Removes AdditionalProperties on build tasks project |
| .github/workflows/powershell-script-tests.yml | Removes Set-ScreenResolution.ps1 path trigger |
| .github/scripts/RunTests.ps1 | Adds Compatibility unit tests project |
| .github/dependabot.yml | Removes Microsoft.Windows.SDK.BuildTools.WinApp from ignore patterns |
Review details
- Files reviewed: 216/3035 changed files
- Comments generated: 5
- Review effort level: Lite
| if ($args.count -gt 0) { | ||
| $env:DOTNET_NOLOGO=1 | ||
| & "$dotnetRoot\dotnet.exe" $args | ||
| ExitWithExitCode $LASTEXITCODE | ||
| } |
| foreach (var k in s.Keys) | ||
| { | ||
| if (k is null) | ||
| continue; | ||
|
|
||
| var key = k.ToString(); | ||
| if (key is not null) | ||
| state[key] = s?[k]?.ToString(); | ||
| var val = s?[k]?.ToString(); | ||
|
|
||
| state[key] = val; |
| else | ||
| { | ||
| platformControl.ClearValue(TextBlock.LineHeightProperty); | ||
| } | ||
| } |
| var request = navigationAction.Request; | ||
| var lastUrl = request.Url?.ToString() ?? string.Empty; | ||
| var lastUrl = request.Url.ToString(); | ||
|
|
| public static bool IsKeyDeclaredInInfoPlist(string usageKey) => | ||
| NSBundle.MainBundle.InfoDictionary?.ContainsKey(new NSString(usageKey)) == true; | ||
| NSBundle.MainBundle.InfoDictionary.ContainsKey(new NSString(usageKey)); |
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
### Description of Change Reopened against `main` as requested in #38103. `Element` stored a single `(key, specificity)` pair per `BindableProperty`, so a `{DynamicResource}`-valued `Setter` inside a `VisualState` **overwrote** the registration a style had installed when the state was entered (`OnSetDynamicResource` replaces the entry when the incoming specificity is greater or equal, and a full-VSM setter outranks a style's), and `Setter.UnApply` then removed the entry outright when the state was left. From that point `Element.OnResourcesChanged` never saw the property again: the element stopped following the resource for the rest of its lifetime, back in the default state, with no way to recover. A theme switch afterwards leaves it on whatever value happened to be resolved at the moment the state was entered. `BindableObject.RemoveDynamicResource(BindableProperty, SetterSpecificity)` already accepted a specificity and discarded it, while its siblings `RemoveBinding(property, specificity)` and `ClearValue(property, specificity)` honour theirs. This stores the registrations in `SetterSpecificityList<string>` — the same structure `Values` and `Bindings` already use — so each specificity keeps its own entry: - entering a state adds the state's registration without disturbing the style's; - leaving it removes only that one and republishes the next one down, so the property keeps tracking; - `BindableContextAttributes.IsDynamicResource` is cleared only once the last registration for the property is gone. `SetterSpecificityList<T>` also gains `GetValueAt`/`GetSpecificityAt`, because `Element` has to enumerate every registered key, not just the effective one — `GetMergedResources` and both `OnResourcesChanged` overloads need all of them. ### Issues Fixed Fixes #38069 ### Tests `DynamicResourceTests.VisualStateDynamicResourceDoesNotDestroyTheStylesRegistration` walks the full cycle on a `Button` whose style paints `BackgroundColor` from one dynamic resource and whose `Disabled` state paints it from another: enabled colour, disabled colour, back to the enabled colour, and then a change to the enabled resource must still reach the element. Without the change that last assertion fails — `Expected: Red, Actual: Blue`, the element frozen on the value resolved before the state was entered (verified by reverting only the three product files to `main` and re-running the test). `Controls.Core.UnitTests` on this branch: **5645 passed, 30 skipped, 0 failed**. The same change was verified against `release/10.0.1xx-sr10` in #38103 (5716 passed, 0 failed); the two branches now carry the identical patch. ### Note on the force-push This branch was originally written against `main` while it still carried the accidental `net11.0` payload from #37995, where `SetterSpecificityList<T>` is a struct. #38155 reverted that payload, so the branch has been rebuilt on top of current `main` (`c478f6b4`) with the class-based version of the patch — the same one that was validated on `release/10.0.1xx-sr10`. --------- Co-authored-by: Jakub Florkowski <kubaflo123@gmail.com>
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
PR #37995 was opened from a branch containing the
net11.0branch history. Although the PR targetedmain, GitHub squashed all 100 commits in that branch into the merge commit, introducing changes across 3,272 files.Description of Change
net11.0payload from Tests: remove dedicated ListView coverage #3799586ca3e5655mainchanges merged after Tests: remove dedicated ListView coverage #37995Validation
maincommitsUITestCategories.ListVieworTestCategory.ListViewreferenceseng/pipelines/common/ui-tests.ymlsuccessfully