Description: Normally in multi-winform application we create a common base class which exhibits common behavior of all forms in application. Every win-form deriving from common base win-form will have same behavior as of base win-form.
Implementing base-derived model in WPF is a bit complex because both Xaml and code behind (.cs) class should know which base class to derive from.
Let's implement this model in WPF using one practical scenario:
Example: Suppose we want that every WPF dialog used in our application should be a modal dialog. So our motive is to create a base class which will ensure every dialog deriving from this base class will be modal dialog.
Implementation Approach:
Step 1: Create a base class which exposes one public method ShowModalDialog() which associates WPF window to main window. Any class deriving from this base class will call this exposed method instead of normal ShowDialog () method to show modal dialog.
public class DialogBase: Window
{
[DllImport("user32.dll")]
iternal static extern IntPtr GetActiveWindow (); // Returns active window reference.
public bool? ShowModalDialog()
{
WindowInteropHelper helper = new WindowInteropHelper(this);
helper.Owner = GetActiveWindow(); // Set main active window.
return this.ShowDialog();
}
}
Step 2: Now any new wpf window needs to derive from above base class.
public class SampleDialog : DialogBase
{
public SampleDialog( )
{
}
}
Step 3: As any WPF dialog also has a xaml associated with it. So we need to have reference of base class in xaml also so that it can associate with base class.
<my:DialogBase
xmlns:my="clr-namespace:MyNameSpace" // Include namespace of base class.
Title="Sample WPF Dialog"
//// Implementation of xaml binding and other stuff as such.
</my:DialogBase>
Step4: Now we have the basic framework available and we are ready to use it while showing WPF dialog. Instead of calling showDialog() method we will call base class's ShowModalDialog() method.
Main()
{
SampleDialog wpfDialog = new SampleDialog ();
wpfDialog.ShowModalDialog();
}