Windows Forms is a thin wrapper around the Win32 API and GDI+. Which is good if you want to customize things on a low level, but bad if you want to run it anywhere else. But cross-platform compatibility for a UI framework was probably a very low priority in 1999 or 2000. You could port it to .NET Core, but then you could only run it on Windows, since pretty much everything is a P/Invoke into user32.dll.
Generally, having something cross-platform either means you're terrible everywhere (Swing), terrible on non-primary platforms (GTK), or have to invest a lot of work in making things work well and still don't quite feel native (Qt). Or you go the Xamarin Forms route and have a few core controls that have to be implemented natively on every platform, which reduces their features to the lowest common denominator, often doesn't expose or enable low-level platform details that may sometimes be needed for customization, and means that you have to invest thrice as much effort into making everything work.
In my experience UI frameworks either are bound to a specific platform, or suck. Or both. But a cross-platform WPF would be awesome, but I'd rather expect UWP to become cross-platform instead of WPF.
Strongly agree with ygra on the cross platform GUI view. This has been my experience since I coded against XVT [1] 25 years ago. I suspect it's a general truth that applies to any abstraction layer; for instance ORMs or AMQP. Abstraction layers attempt to hide complexity, but they can't make it go away.
Not sure about WPF. It's a shame because it's a great development experience.