Since your settings is an app, I would use the System.Diagnostics.Process from within your Winforms app to start your WPF settings app. Since you are starting the Settings as an application rather than trying to invoke it as a Window, your styles will be loaded. Also, you can use the WaitForExit() or WaitForExit(int) methods of Process to wait for your settings app to finish, relinquishing control back to your Winforms app only when the Settings app is complete. This also serves as the notification requested when the Settings app is closed.
Here's a quick code snippit:
IN EVENT THAT OPENS SETTINGS WPF APP:
Process myProcess = new Process();
myProcess.StartInfo.UseShellExecute = false;
myProcess.StartInfo.FileName = "C:\\mysettingsapp\\mysettingsapp.exe"; // replace with path to your settings app
myProcess.StartInfo.CreateNoWindow = false;
myProcess.Start();
// the process is started, now wait for it to finish
myProcess.WaitForExit(); // use WaitForExit(int) to establish a timeout
By calling WaitForExit on the main thread, the WinForms app is blocked waiting for the settings app to complete. This will prevent users from opening more than one settings window. I didn't see a non-blocking requirement for the Winforms app. So if you can't block, I can come up with another way.
UPDATE
To grab the executing assembly's path:
string path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase );