Click here to Skip to main content
13,597,734 members
Click here to Skip to main content
Add your own
alternative version

Tagged as


62 bookmarked
Posted 17 Mar 2013
Licenced CPOL

WPF Dialog / MessageBox Manager

, 17 Mar 2013
Rate this:
Please Sign up or sign in to vote.
Creating and layering message, progress and wait dialogs in WPF


In this article, I want to introduce a small dialog management framework in WPF. It provides several dialogs which are all configurable. In addition, it is possible to cascade / layer several dialogues. The framework consists of:

  • Simple Message Dialog
  • Wait Animation Dialog  
  • Progress Dialog 
  • Custom Content Dialog  

Using the Code

The entry point in the framework is managed via an instance of DialogManager. It provides an API that acts as a factory for creating the dialogs. The DialogManager itself needs a ContentControl to interact with. When a dialog is shown up, the content of the provided ContentControl is removed completely and replaced with a rendered image of the previous content and the layered dialogues. When all dialogues are closed, the original content will be placed back in the ContentControl.

Here's a simple example on how the MessageDialog works:

var dialogManager = new DialogManager(this, Dispatcher);
	.CreateMessageDialog("Test", "I'm a dialog", DialogMode.Ok)

For the WaitDialog, it is possible to specify a worker. When the worker is finished, you can configure the dialog to close immediately or to display a "finished" message.

var dialog = _dialogManager
    .CreateWaitDialog("Waiting and waiting...", "Finished", DialogMode.Ok);
// We do some asynchronous work for 2 secs...
dialog.Show(() => Thread.Sleep(2000));

In addition, you can use a ProgressDialog, that accepts a worker, too. You can then set the progress in the worker as you like it:

var dialog = _dialogManager
    .CreateProgressDialog("Progressing...", "Finished", DialogMode.Ok);
// We do some asynchronous work for 2 secs...
dialog.Show(() =>
        for (var i = 0; i < 10; i++)
            dialog.Progress += 10;

Of course, you can place any WPF control inside the dialog by using the CustomContentDialog. In that case, it could be interesting to set the VerticalDialogAlignment and the HorizontalDialogAlignment properties of the dialog so that your content is scaled correctly.

Points of Interest

There are several configuration possibilities that you can see in the IDialog interfaces. By default, a click on one of the specified buttons (Ok, Cancel, etc.) closes the dialog. This behavior can be overwritten, and in addition, callbacks can be specified.

Thread safety: Creation of dialogs and showing them is automatically done in the UI thread so no dispatcher invoke is necessary.  


It would be nice to provide a fluent API that brings more convenience to the user. That could be achieved by adding a configuration layer that will be accessible from the DialogManager. So, instead of using the factory methods, a small configuration model would be built up on every creation request that internally would interact with a dialog. At the end, some sort of "create" method could be called to commit the configuration and return a new dialog. The IDialogConfig interface demonstrates this approach, but I didn't have time to implement that so far.


	.CreateMessageDialog("This is the message")
	.Caption("My Title")
	.Ok(() =>
			// do something here...


  • v1 on 2013-03-17


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Ronald Schlenker
Software Developer (Senior)
Germany Germany
No Biography provided

You may also be interested in...


Comments and Discussions

QuestionThank You! Pin
Phillip Givens30-Jul-17 5:56
memberPhillip Givens30-Jul-17 5:56 
QuestionMain Window Does not re/render or draw when over lay is present Pin
Mallikarjun Kalkere8-Jun-17 9:15
memberMallikarjun Kalkere8-Jun-17 9:15 
GeneralChange to Trim the Window Caption Bar Pin
DevKnightlie11-May-17 0:44
memberDevKnightlie11-May-17 0:44 
GeneralRe: Change to Trim the Window Caption Bar Pin
Phillip Givens30-Jul-17 5:54
memberPhillip Givens30-Jul-17 5:54 
QuestionWPF Dialog / MessageBox Manager - DialogResult.None (CreateWaitDialog) Pin
Member 1021551314-May-16 6:42
memberMember 1021551314-May-16 6:42 
AnswerRe: WPF Dialog / MessageBox Manager - DialogResult.None (CreateWaitDialog) Pin
Member 1021551314-May-16 7:48
memberMember 1021551314-May-16 7:48 
QuestionParent content is state from initialization Pin
FueledByIgnorance17-Aug-15 16:10
memberFueledByIgnorance17-Aug-15 16:10 
GeneralMy vote of 5 Pin
Jagd333-Jun-15 7:40
memberJagd333-Jun-15 7:40 
QuestionGreat Control - One Issue Pin
Nemanja Cvetkovic27-Feb-15 3:02
memberNemanja Cvetkovic27-Feb-15 3:02 
Questionvery usefull Pin
JasRaj Bishnoi12-Feb-15 1:17
memberJasRaj Bishnoi12-Feb-15 1:17 
GeneralMy vote of 3 Pin
nil_bond_0077-Nov-14 0:07
membernil_bond_0077-Nov-14 0:07 
QuestionResize Windows while dialog is "open" Pin
Member 1038187619-Jun-14 4:00
memberMember 1038187619-Jun-14 4:00 
QuestionWPF Dialog / MessageBox Manager in a Non ViewModels system Pin
Daniel Brito2-Apr-14 8:25
memberDaniel Brito2-Apr-14 8:25 
AnswerRe: WPF Dialog / MessageBox Manager in a Non ViewModels system Pin
Member 1082372221-May-14 11:36
memberMember 1082372221-May-14 11:36 
QuestionGetting DialogResult not working Pin
CarcaB0t30-Oct-13 0:47
memberCarcaB0t30-Oct-13 0:47 
AnswerRe: Getting DialogResult not working Pin
Ronald Schlenker31-Oct-13 2:56
memberRonald Schlenker31-Oct-13 2:56 
GeneralRe: Getting DialogResult not working Pin
CarcaB0t31-Oct-13 9:14
memberCarcaB0t31-Oct-13 9:14 
Questionclose dialog wiht buttons from the custom content. Pin
Member 433290120-Oct-13 18:19
memberMember 433290120-Oct-13 18:19 
AnswerRe: close dialog wiht buttons from the custom content. Pin
Ronald Schlenker31-Oct-13 2:46
memberRonald Schlenker31-Oct-13 2:46 
QuestionHow get the dialog result ? Pin
Penc27-Aug-13 2:54
memberPenc27-Aug-13 2:54 
AnswerRe: How get the dialog result ? Pin
Ronald Schlenker28-Aug-13 4:32
memberRonald Schlenker28-Aug-13 4:32 
GeneralRe: How get the dialog result ? Pin
Penc1-Sep-13 23:09
memberPenc1-Sep-13 23:09 
GeneralRe: How get the dialog result ? Pin
J. Chris Long2-Sep-13 12:42
memberJ. Chris Long2-Sep-13 12:42 
Question5+ Pin
anthonychege16-Jul-13 23:20
memberanthonychege16-Jul-13 23:20 
General5 Pin
Fernando E. Braz19-Mar-13 18:04
memberFernando E. Braz19-Mar-13 18:04 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web04-2016 | 2.8.180621.3 | Last Updated 18 Mar 2013
Article Copyright 2013 by Ronald Schlenker
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid