# Windows Forms and WPF Breaking Changes (.NET 10) These changes affect projects using Windows Forms (`true`) or WPF (`true`). ## Windows Forms ### Source-Incompatible Changes #### API obsoletions Several Windows Forms APIs have been marked obsolete with custom diagnostic IDs. Follow the guidance in the warning message for each. #### Applications referencing both WPF and WinForms must disambiguate MenuItem and ContextMenu types If a project references both WPF and WinForms, the `MenuItem` and `ContextMenu` types are ambiguous. Use fully qualified names: ```csharp // Before (ambiguous in .NET 10) var item = new MenuItem("File"); // After var item = new System.Windows.Forms.MenuItem("File"); // or var item = new System.Windows.Controls.MenuItem(); ``` #### Renamed parameter in HtmlElement.InsertAdjacentElement The parameter name in `HtmlElement.InsertAdjacentElement` has changed from `orientation`. Calls that use named arguments with `orientation` will no longer compile; update them to use positional arguments: ```csharp // Before — named arguments with old parameter name element.InsertAdjacentElement(orientation: HtmlElementInsertionOrientation.BeforeBegin, newElement: newElement); // After — use positional arguments element.InsertAdjacentElement(HtmlElementInsertionOrientation.BeforeBegin, newElement); ``` ### Behavioral Changes #### TreeView checkbox image truncation The checkbox rendering in `TreeView` controls has been adjusted, which changes text positioning. Visual appearance may differ slightly. #### StatusStrip uses System RenderMode by default `StatusStrip` now uses the system render mode by default instead of a custom renderer. The visual appearance may change. Set `RenderMode` explicitly to restore the previous look. #### System.Drawing OutOfMemoryException changed to ExternalException **Important:** Some `System.Drawing` operations that previously threw `OutOfMemoryException` now throw `ExternalException` (from `System.Runtime.InteropServices` — NOT `ArgumentException`). This reflects the actual GDI+ error code. Update catch blocks: ```csharp // Before — only catching OutOfMemoryException try { /* drawing operation */ } catch (OutOfMemoryException) { /* handle */ } // After — catch ExternalException (the new exception type in .NET 10) try { /* drawing operation */ } catch (ExternalException) { /* handle */ } catch (OutOfMemoryException) { /* handle — for older runtimes */ } ``` ## WPF ### Source-Incompatible / Behavioral Changes #### Empty ColumnDefinitions and RowDefinitions are disallowed Empty `` and `` elements in XAML now cause errors. Remove them if they don't contain any definitions: ```xml ``` #### Incorrect usage of DynamicResource causes application crash Incorrect `DynamicResource` usage that was silently ignored now causes crashes at runtime. Common issues: - Using `DynamicResource` where `StaticResource` is required (e.g., in non-dependency-property contexts) - Referencing resources that don't exist Audit all `DynamicResource` usage in XAML and ensure each reference points to a valid resource and is used in a context that supports dynamic resources.