I wasn't able to upload the project here. It says the file was either too large or not the allowed type. I have uploaded it to a dropbox account instead: Sample.zip
It has a RibbonView with an application button, and one tab. In the SelectionChanged event, it checks if an internal data object is null, and if it is, it sets the "IsBackstageOpen" property to true, to keep it open.
This tab serves no purpose aside from its existence triggering the SelectionChanged event, which is why I referred to it as a "dummy tab". When hitting escape, or clicking the back arrow in the backstage, the UI freezes.
I am currently using version 2016.1.217, which is a bit out of date. If upgrading resolves this, then that's a simple solution.
The other problem I had mentioned is that, ideally, I don't want to have to use a placeholder tab when no data is loaded, just to handle keeping the backstage open.
To address this issue, what I have done is changed the reference to "telerik:RibbonCommands.CloseBackstage" in the RadRibbonBackstage template that I extracted, for the close button, to reference my own custom implementation through a static class, in which it can check if my view model is null or not, and prevent closing. This works fine for the button click, however, the escape key still closes the backstage. Is this because the original RibbonCommands.CloseBackstage has a keybinding to Key.Escape?