My real preference is to use a third-party help authorization system to create HTML help.
Then we use WebBrowser to display this help as needed. The authoring system that we use makes it easy to extract one page from the main help (each "topic" is a single HTML file and can be included with full content or not at will).
Of course, it definitely seemed a bit unpleasant hack at first - but as soon as we wrote the basic plumbing (some attached properties for xaml to specify attributes for the contextual location and add behavior to start the help, etc.), it is pretty clean.
One very pleasant advantage for this approach is a single assembly of help systems, which works fine in all contexts - we can include documentation on the Internet, place it locally for use in the browser and use it in context from our application directly.
source share