diff --git a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/MessageBox/Implementation/MessageBox.cs b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/MessageBox/Implementation/MessageBox.cs index 50175160..8b9de3df 100644 --- a/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/MessageBox/Implementation/MessageBox.cs +++ b/ExtendedWPFToolkitSolution/Src/WPFToolkit.Extended/MessageBox/Implementation/MessageBox.cs @@ -24,6 +24,11 @@ namespace Microsoft.Windows.Controls /// private MessageBoxResult _defaultResult = MessageBoxResult.None; + /// + /// Tracks the owner of the MessageBox + /// + private Window _owner; + #endregion //Private Members #region Constructors @@ -150,6 +155,17 @@ namespace Microsoft.Windows.Controls return Show(messageText, string.Empty, MessageBoxButton.OK); } + /// + /// Displays a message box that has a message and that returns a result. + /// + /// A System.Windows.Window that represents the owner of the MessageBox + /// A System.String that specifies the text to display. + /// A System.Windows.MessageBoxResult value that specifies which message box button is clicked by the user. + public static MessageBoxResult Show(Window owner, string messageText) + { + return Show(owner, messageText, string.Empty, MessageBoxButton.OK); + } + /// /// Displays a message box that has a message and title bar caption; and that returns a result. /// @@ -161,6 +177,12 @@ namespace Microsoft.Windows.Controls return Show(messageText, caption, MessageBoxButton.OK); } + + public static MessageBoxResult Show(Window owner, string messageText, string caption) + { + return Show(owner, messageText, caption, MessageBoxButton.OK); + } + /// /// Displays a message box that has a message and that returns a result. /// @@ -170,7 +192,13 @@ namespace Microsoft.Windows.Controls /// A System.Windows.MessageBoxResult value that specifies which message box button is clicked by the user. public static MessageBoxResult Show(string messageText, string caption, MessageBoxButton button) { - return ShowCore(messageText, caption, button, MessageBoxImage.None, MessageBoxResult.None); + return ShowCore(null, messageText, caption, button, MessageBoxImage.None, MessageBoxResult.None); + } + + + public static MessageBoxResult Show(Window owner, string messageText, string caption, MessageBoxButton button) + { + return ShowCore(owner, messageText, caption, button, MessageBoxImage.None, MessageBoxResult.None); } /// @@ -183,7 +211,13 @@ namespace Microsoft.Windows.Controls /// A System.Windows.MessageBoxResult value that specifies which message box button is clicked by the user. public static MessageBoxResult Show(string messageText, string caption, MessageBoxButton button, MessageBoxImage icon) { - return ShowCore(messageText, caption, button, icon, MessageBoxResult.None); + return ShowCore(null, messageText, caption, button, icon, MessageBoxResult.None); + } + + + public static MessageBoxResult Show(Window owner, string messageText, string caption, MessageBoxButton button, MessageBoxImage icon) + { + return ShowCore(owner, messageText, caption, button, icon, MessageBoxResult.None); } /// @@ -197,7 +231,13 @@ namespace Microsoft.Windows.Controls /// A System.Windows.MessageBoxResult value that specifies which message box button is clicked by the user. public static MessageBoxResult Show(string messageText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult) { - return ShowCore(messageText, caption, button, icon, defaultResult); + return ShowCore(null, messageText, caption, button, icon, defaultResult); + } + + + public static MessageBoxResult Show(Window owner, string messageText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult) + { + return ShowCore(owner, messageText, caption, button, icon, defaultResult); } #endregion //Public Static @@ -219,12 +259,13 @@ namespace Microsoft.Windows.Controls /// The caption. /// The button. /// The image. - protected void InitializeMessageBox(string text, string caption, MessageBoxButton button, MessageBoxImage image, MessageBoxResult defaultResult) + protected void InitializeMessageBox(Window owner, string text, string caption, MessageBoxButton button, MessageBoxImage image, MessageBoxResult defaultResult) { Text = text; Caption = caption; _button = button; _defaultResult = defaultResult; + _owner = owner; SetImageSource(image); Container = CreateContainer(); } @@ -326,10 +367,10 @@ namespace Microsoft.Windows.Controls /// The icon. /// The default result. /// - private static MessageBoxResult ShowCore(string messageText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult) + private static MessageBoxResult ShowCore(Window owner, string messageText, string caption, MessageBoxButton button, MessageBoxImage icon, MessageBoxResult defaultResult) { MessageBox msgBox = new MessageBox(); - msgBox.InitializeMessageBox(messageText, caption, button, icon, defaultResult); + msgBox.InitializeMessageBox(owner, messageText, caption, button, icon, defaultResult); msgBox.Show(); return msgBox.MessageBoxResult; } @@ -337,10 +378,10 @@ namespace Microsoft.Windows.Controls /// /// Resolves the owner Window of the MessageBox. /// - /// the owner element - private static FrameworkElement ResolveOwner() + /// the owner Window + private static Window ResolveOwnerWindow() { - FrameworkElement owner = null; + Window owner = null; if (Application.Current != null) { foreach (Window w in Application.Current.Windows) @@ -405,13 +446,10 @@ namespace Microsoft.Windows.Controls newWindow.AllowsTransparency = true; newWindow.Background = Brushes.Transparent; newWindow.Content = this; - - var owner = ResolveOwner(); - if (owner != null) - { - newWindow.Owner = Window.GetWindow(owner); + newWindow.Owner = _owner ?? ResolveOwnerWindow(); + + if (newWindow.Owner != null) newWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterOwner; - } else newWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;