Detecting if Browser-Hosted Sample
This sample demonstrates how to detect if a piece of code is running from an XAML browser application (XBAP) or a standalone application.
This sample demonstrates a specific feature of the Windows Presentation Foundation and, consequently, does not follow application development best practices. For comprehensive coverage of Windows Presentation Foundation (WPF) and Microsoft .NET Framework application development best practices, refer to the following as appropriate:
Accessibility - Accessibility Best Practices
Localization - WPF Globalization and Localization Overview
Performance - Optimizing WPF Application Performance
Security - WPF Security
Building the Sample
Install the Windows Software Development Kit (SDK) and open its build environment command window. On the Start menu, point to All Programs, Microsoft Windows SDK, and then click CMD Shell.
Download the sample, usually from the software development kit (SDK) documentation, to your hard disk drive.
To build the sample from the build environment command window, go to the source directory of the sample. At the command prompt, type MSBUILD.
To build the sample in Microsoft Visual Studio 2005, load the sample solution or project file and then press CTRL+SHIFT+B.
Running the Sample
To run the compiled sample from the build environment command window, execute the .exe file in the Bin\Debug or Bin\Release folder contained under the sample source code folder.
To run the compiled sample with debugging in Visual Studio 2005, press F5.
This sample consists of a library (SharedLibary) that is shared by an XAML browser application (XBAP) application (XBAPClient) and a standalone Windows application (WinAppClient). SharedLibrary encapsulates the functionality to perform a task that is common to both client applications. Part of this functionality is showing a user interface (UI) that is appropriate to the type of client that is hosting it eg a Page if browser-hosted, or a Window of hosted by a standalone application.
The shared library uses IsBrowserHosted to detect whether it is running in either a browser-hosted application or a standalone application.
You can't have the code that instantiates a Window in the same member as the code that inspects the IsBrowserHosted; Window has an inheritance demand that requires the member in which it is being instantiated to have UIPermission. To solve this problem, you can refactor the code by moving the Window instantiation code into a separate method that you call from the same member in which IsBrowserHosted is inspected, as this sample demonstrates.