Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add IViewAware to IWindowManager.ShowMessageBox #393

Open
canton7 opened this issue Jun 23, 2024 · 0 comments
Open

Add IViewAware to IWindowManager.ShowMessageBox #393

canton7 opened this issue Jun 23, 2024 · 0 comments

Comments

@canton7
Copy link
Owner

canton7 commented Jun 23, 2024

Here's why: In a recent project, I encountered an issue where after using ShowMessageBox, the popup window, which I will call Window-A, quickly disappeared, and my entire UI became unresponsive. After some investigation, I found the root cause. The default implementation of IWindowManager, WindowManager, has a call to this.ShowDialog(vm) in the ShowMessageBox function. Since ShowDialog doesn't specify an owner window, Stylet defaults to using the activated window as its owner. In my project, a small notification popup window, which I will cal Window-B, appears before calling ShowMessageBox, which automatically disappears after 2 seconds. The ShowMessageBox popup Window-A then incorrectly takes this notification popup Window-B as its owner. When the notification popup Window-B disappears, the ShowMessageBox popup Window-A also disappears due to losing its owner. Since Window-A is a modal window, the entire UI appears to be frozen.

I propose changing the ShowMessageBox function signature to:

public MessageBoxResult ShowMessageBox(string messageBoxText, string caption = "",
    MessageBoxButton buttons = MessageBoxButton.OK,
    MessageBoxImage icon = MessageBoxImage.None,
    MessageBoxResult defaultResult = MessageBoxResult.None,
    MessageBoxResult cancelResult = MessageBoxResult.None,
    IDictionary<MessageBoxResult, string> buttonLabels = null,
    FlowDirection? flowDirection = null,
    TextAlignment? textAlignment = null,
    IViewAware viewModel = null)

Adding an IViewAware parameter last allows for more flexible specification of the owner window for ShowDialog to call ShowDialog(vm, viewModel), preventing the above issue. Since this parameter defaults to null, it will also be compatible with existing code.

Originally posted by @TreatTrick in #391

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant