Fullscreen behaves differently/worse than XNA

There are some issues related to fullscreen behaviour in my migrated XNA 4 project.

In my old XNA 4 project, it was possible to get full screen with a non-desktop resolution. The program would perform mode switching, which changes the resolution of the monitor to match the desired rendering resolution. In MonoGame, fullscreen is only possible with the current desktop resolution.

Is this correct? Or can I make code changes to match the XNA behaviour?

Also, in my old XNA 4 project it was possible to alt-tab out of and into a fullscreen game.
In MonoGame, the game stays in windowed mode after tabbing out.
Is there something I can do to fix this? Or do I have to accept it.

After searching, I found plenty of full screen related issues, but none that actually covered these issues. So I decided to create two new issues:

I made a fix to the mode switch issue that makes MonoGame behave like XNA did.

In GraphicsDeviceManager there is a HardwareModeSwitch property that determines if it does a display mode change (the old way, same as XNA) or a full-screen borderless window (soft mode change, the new way as required by Windows Store apps, UWP, Mac and Linux). Many new games on Windows even use the soft mode change by default as it works better with compositing desktop managers.

The desktop resolution mode switch was used by some players as a way to compensate for their high dpi screens.
I have gotten ti to work, but there are still some issues with dual screen setups, and in some cases single screens.

By the way, MonoGame by default does not do a mode change. Instead it uses the desktop resolution and presents a top left corner image with black borders.
To do a mode switch, the swap chain has to be created with Flags = SwapChainFlags.AllowModeSwitch among other things.

Right now I’m having a problem where the fullscreen window appears stretched and cut off at the bottom, so the bottom part is not visible. This is when using the desktop resolution.

I found an error. ResizeBuffers would change the AllowModeSwitch flag, messing everything up.
I had to change the line to

_swapChain.ResizeBuffers(2,
                                        PresentationParameters.BackBufferWidth,
                                        PresentationParameters.BackBufferHeight,
                                        format,
                                        SwapChainFlags.AllowModeSwitch);  //None);

Now my problem is that desktop res is truncated and stretched if I use Stretched mode, other resolutions are fine though.

EDIT: Doing more senseless hacking, if I change Stretched to Unspecified, it works for all resolutions.

If I can add my contribution:
When switching to fullscreen, my app draws over the whole screen, but the “final” rendertarget is not drawn fullscreen, ie: not stretched to occupy all the screen as it should and somewhate pixelated. Instead, if say, my desktop is 1920x1080, and RT is 1280x720, the screen is black and the top left shows the rendertarget.
If I switch back to windowed, and then anothertime fullscreen, ONLY THEN it is fullscreen.

if((_State_CurrentKeyboard.IsKeyDown(Keys.Enter) && _State_LastKeyboard.IsKeyUp(Keys.Enter))) { this.Window.IsBorderless = true;// false; this._GFX_GraphicsDevMgr.ToggleFullScreen(); this._GFX_GraphicsDevMgr.ApplyChanges(); }

If I remove the line

this.Window.IsBorderless = true;

then no stretching happens ! So is it a true fullscreen ? Is this an issue