【问题标题】:WPF: Always-open Window and Modal DialogesWPF:始终打开的窗口和模式对话框
【发布时间】:2015-01-21 02:39:35
【问题描述】:

我的应用程序中有一个帮助窗口,可以随时在应用程序中打开。我的应用程序的主窗口是一个向导窗口,它打开模态对话框以及前面提到的非模态帮助窗口。只要用户需要帮助(来自向导和向导打开的任何模式对话框),就应该可以保持帮助窗口打开并可访问。

当首先在主窗口中打开帮助窗口,然后再打开一个模式对话框时,帮助窗口的行为就像它归主窗口所有并且在同一层次结构级别上一样 - 它被禁用。当首先在模态对话框中打开帮助窗口然后关闭模态对话框时,帮助窗口在主窗口中启用。因此,帮助窗口似乎总是以某种方式与当前的模态对话框相关联,但仍然可以从任何模态父窗口访问。

我已经设法通过在模式对话框打开后隐藏并重新显示帮助窗口来解决问题。在打开模式对话框时是否有任何其他解决方案可以使帮助窗口保持启用状态? TopMost 属性对行为没有影响。

我猜这是 Windows 中的一般模式对话框行为,但我目前正在为我的应用程序使用 WPF。

提前感谢您的意见!

P

【问题讨论】:

    标签: wpf modal-dialog window


    【解决方案1】:

    如果它只是一个帮助窗口,为什么要走很长的路?

    创建一个帮助项目并将其 exe 文件用作单独的进程。这样模态窗口就不会阻塞您的帮助窗口:

    System.Diagnostics.Process.Start("HelpWindow.exe");
    

    编辑

    另一种解决方法是将所有模式窗口嵌入同一个窗口中,以便仅防止点击主要内容:

    <MainWindow>
        <Grid>
            <!-- main content of main window -->
            <local:MyMainUC/>
    
            <!-- any messageBox, modal window or dialog here -->
            <Border Background="#2000" Visibility="Collapsed">
                <local:MyDialogUC HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
            <Border Background="#2000" Visibility="Collapsed">
                <local:MyMessageBox HorizontalAlignment="Center" VerticalAlignment="Center"/>
            </Border>
        </Grid>
    </MainWindow>
    

    因此,您只需更改边框的Visibility 而不是window.ShowDialog()

    【讨论】:

    • 我需要通过 WPF 从帮助窗口访问当前应用程序窗口。当 HTML 链接悬停在我们所有应用程序窗口的帮助窗口中时,我们的帮助系统能够突出显示控件。
    • 很抱歉我错过了那部分,但是有一个技巧我总是喜欢使用。查看编辑后的帖子
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2016-07-29
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多