I've got a hack that seems to work for now... but I can almost bet there's a more elegant solution.
In the PopupWrapper constructor I call into a hack helper method where we pull a Grid out of the root visual (using a little helper) and I have to remove all popup controls out of the tree, and re-add the new popup when it shows up.
I hope someone can suggest a more elegant solution...
this.container = new ContentControl();
this.popUp = new Popup();
this.popUp.Child = this.container;
/// This is to support an issue where a popup cannot contain another popup.
/// So a view cannot contain anything like a combobox/listbox/etc without this workaround.
private void HackPopupIntoVisualTree()
var g = XamlExtensions.FindName((FrameworkElement)Application.Current.RootVisual, "PopupGridContainer") as Grid;
Debug.Assert(g != null, "The current shell does not have a <Grid x:Name=\"PopupGridContainer\"> defined. Cannot use the popup region adapter without this grid.");
var existingPopupsQuery = g.Children.Where(w => w.GetType() == typeof(Popup));
foreach (var item in existingPopupsQuery.ToArray())
Debug.Assert(existingPopupsQuery.Count() == 0);