【问题标题】:Keeping dialogs on top of window, but not on top of everything将对话框保留在窗口之上,但不是在所有内容之上
【发布时间】:2011-09-08 03:47:16
【问题描述】:

在我的 WPF 应用程序中,我有很多弹出的自定义对话框,因此用户可以使用 someDialogClass.ShowDialog() 执行各种操作。为了确保对话框位于调用它的窗口的顶部,我将Topmost="True" 添加到对话框的XAML 文件的Window 标记中。这可行,但对话框会显示在每个打开的窗口上——甚至是其他应用程序。这真的很烦人。那么有没有办法强制对话框始终位于其父应用程序之上,但不一定位于其他应用程序之上?

这是我拥有的对话框的Window 标记的简化版本(省略所有xmlns 内容):

<Window
mc:Ignorable="d"
ShowInTaskbar="False"
Topmost="True"
WindowStartupLocation="CenterOwner"
ResizeMode="NoResize"
SizeToContent="WidthAndHeight"
WindowStyle="ToolWindow">

【问题讨论】:

    标签: c# wpf xaml layout dialog


    【解决方案1】:

    您需要设置Dialog/WindowOwner,然后它将仅位于该窗口的顶部。

    例如:

    var loginForm = new LoginForm();
    loginForm.Owner = Application.Current.MainWindow;
    var success = loginForm.ShowDialog();
    

    不要在窗口上设置TopMost 属性,否则它将在每个窗口的顶部。

    【讨论】:

    • 万岁!预期行为!谢谢!
    • 应用程序似乎没有名为“当前”的定义。
    • 即使我只使用 x.Owner = this;它不起作用。 ShowDialogue 总是在应用程序窗口启动后将对话放在屏幕上的任何位置,而不是在窗口移动后。
    • 修复它:frm.StartPosition = FormStartPosition.CenterParent;
    • 如果您调用 yourForm.Show() ,底层(父)表单将可用并接受用户输入。完美的工具窗口
    猜你喜欢
    • 2018-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 2010-10-15
    相关资源
    最近更新 更多