Message Box
I was working with the System.Windows.MessageBox static class recently (currently, the only way to get something close to application modal - rather than just UI modal - user feedback) and I discovered the irritating focus handling whereby the message box returns focus to the browser rather than the Silverlight control that had focus before the message box was displayed. This is no doubt due to the Silverlight plug-in using the browser to show the message box, but it is irritating none-the-less, and combined with the limited options available for customizing the message box, it was soon apparent that I needed something else to provide my user feedback.
Blocking user interface access when showing a popup...
After searching the Internet, it was clear that I would need to use some kind of user interface modal display based on the Popup primitive. So, I rolled my own modal dialog box class and I discovered another issue in the process.
The user interface beneath the popup remains active which means tabbing around will give you access to the controls you're trying to hide. To mitigate this, I first tried disabling the page by getting the RootVisual (i.e. the page) and setting IsEnabled to false. This worked great, until I used my dialog box during a DataGrid edit operation. The dialog code worked twice and never again. It seemed that disabling and enabling the grid during an edit caused some kind of unrecoverable issue in Silverlight (possibly a memory leak as it eventually crashed).
It turns out that to achieve what I wanted, the easiest way is to set focus to something in my popup dialog and to set the TabNavigation property to KeyboardNavigationMode.Cycle. That way, focus never leaves the dialog and so the underlying UI remains out-of-bounds, but without creating the aforementioned issue.