Here is some code for a RadWindowController I came up and use in my LOB applications. Keep in mind your needs will vary and feel free to modify this code as needed.
publicinterfaceIRadWindowController
{
void CloseRadWindow();
void ShowRadWindow(UserControl content, string headerText);
void ShowRadWindow(UserControl content, bool isRestricted, ResizeMode resizeMode, Telerik.Windows.Controls.WindowStartupLocation windowStartUpLocation,
string headerText);
eventEventHandler MainRadWindowClosed;
}
[Export(typeof(IRadWindowController))]
publicclassRadWindowController : IRadWindowController
{
RadWindow _radWindow;
// Used so we can alert any consumer when the MainRadWindow has closed.
publiceventEventHandler MainRadWindowClosed;
public RadWindowController()
{
_radWindow = newRadWindow();
_radWindow.Closed += newEventHandler<WindowClosedEventArgs>(RadWindow_Closed);
SetDefaultWindowValues();
}
// Call if you need to add your own command to close a popup window
publicvoid CloseRadWindow()
{
_radWindow.Close();
}
public void ShowRadWindow(UserControl content, string headerText)
{
// There should only ever be one rad window open using this controller
// The controller is set to Modal so a user should not be able to open
// More than these at once anyway. If other options are needed. Create a new RadWindow in code.
if (_radWindow.IsOpen)
_radWindow.Close();
// We have to wire up to the Current Host's content here so the Rad Window stays centered when the browswer is resized
Application.Current.Host.Content.Resized += newEventHandler(Content_Resized);
_radWindow.Content = content;
_radWindow.Header = headerText;
_radWindow.ShowDialog();
}
// Shows the view passed in a popup window
publicvoid ShowRadWindow(UserControl content, bool isRestricted, ResizeMode resizeMode, Telerik.Windows.Controls.WindowStartupLocation windowStartUpLocation,
string headerText)
{
ShowRadWindow(content, headerText);
}
#region Private Methods
void Content_Resized(object sender, EventArgs e)
{
_radWindow.Left = (Application.Current.RootVisual.RenderSize.Width / 2 - (_radWindow.ActualWidth / 2));
_radWindow.Top = Application.Current.RootVisual.RenderSize.Height / 2 - _radWindow.ActualHeight / 2;
}
void RadWindow_Closed(object sender, WindowClosedEventArgs e)
{// Set our window back to default values
SetDefaultWindowValues();
// Unregister when the Window is closed.
Application.Current.Host.Content.Resized -= newEventHandler(Content_Resized);
// Remove whatever is assigned to the content when the window is closed.
_radWindow.Content = null;
if(MainRadWindowClosed != null)
MainRadWindowClosed(this, null);
}
void SetDefaultWindowValues()
{
// Set Default window values to use if a caller doesn't need custom
_radWindow.IsRestricted = false;
_radWindow.ResizeMode = ResizeMode.NoResize;
_radWindow.WindowStartupLocation = Telerik.Windows.Controls.WindowStartupLocation.CenterOwner;
}
#endregion
}
For a detailed scenario of how I use this a link to a fully working sample, you can find a write up here.