In an ideal world, we would all create applications that were so intuitive that we wouldn't need to provide in-application help. However, with the complexity of some of today's applications, this is not always possible. It is therefore often helpful to provide the end users of our applications with some form of help that they can refer to when necessary.
There are a number of ways of doing this, with the first simply being to provide a link to a separate help file from the application. If we have a PDF, or other type of file that contains help for the users, we can add it to our solution in Visual Studio as a resource.
To do this, we can add a Resources folder into our solution and then select the Add New Item option in the new folder's context menu. After navigating to the help file in the Add New Item dialog and successfully adding it, we can view its properties by selecting it in the Solution Explorer and pressing F4, or right clicking it and selecting Properties from the context menu.
Once the properties are displayed, we can verify that the file has been added with a Build Action of Content and a Copy to Output Directory value of Copy always or Copy if newer, which ensures that our help file and its Resources folder will be copied to the folder that contains the application executable file, and that the newest version will always be used.
We can then add a menu item or button to our application, which the users can select to open the document directly. In our View Model command that is data bound to this control, we can call the Start method of the Process class, passing the path of the help file, to open the file in the default application on the user's computer:
System.Diagnostics.Process.Start(filePath);
We can get the folder path of the application executable file, using the following code:
string filePath = System.AppDomain.CurrentDomain.BaseDirectory;
Therefore, if our Resources folder is in the startup project, we could attain its folder path like this:
string filePath = Path.Combine( new DirectoryInfo(System.AppDomain.CurrentDomain.BaseDirectory). Parent.Parent.FullName, "Resources");
This utilizes the DirectoryInfo class to access the parent folder of the executable file, or the root directory of the project, and the Combine method of the Path class to create a file path that combines the new Resources folder with that path.
If we don't have a complete documentation file for our application, a quick and simple alternative would be to add an information icon to each View. This image control could display pertinent information to the users in a tooltip when they place their mouse pointer over it:

Using the information icon from the Visual Studio Image Library that was discussed in Chapter 8, Creating Visually Appealing User Interfaces, we can create these help points like this:
<Image Source="pack://application:,,,/CompanyName.ApplicationName; component/Images/Information_16.png" Stretch="None" ToolTip="Here is some relevant information" />
Either way, the idea is to provide the users of the application with any help that they may need right from the application itself. This not only improves the usability of our applications but also reduces user errors and increases data quality.