我最终在这里使用了几个答案的组合。接受的答案起初很有用,但正如这里的其他人指出的那样,设置Topmost = true
意味着窗口始终位于运行的任何其他应用程序之上。我的解决方案是这样的:
var myWindow = new MyWindowType();
myWindow.Owner = Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive);
我最初使用:
myWindow.Owner = Application.Current.MainWindow;
但是,如果您像这样打开三个窗口,则此方法会导致问题:
MainWindow
|
-----> ChildWindow1
|
-----> ChildWindow2
然后设置ChildWindow2.Owner = Application.Current.MainWindow
会将窗口的所有者设置为其祖父窗口,而不是父窗口。
为了加快速度,我已将其作为代码片段添加到 Visual Studio 中。如果将以下内容添加到 Tools --> Code Snippet Manager --> My Code Snippets:
<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2010/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>MVVM Set owner of page to be current active window</Title>
<Shortcut>owner</Shortcut>
</Header>
<Snippet>
<Code Language="CSharp">
<![CDATA[System.Windows.Application.Current.Windows.OfType<Window>().SingleOrDefault(x => x.IsActive);]]>
</Code>
</Snippet>
</CodeSnippet>
</CodeSnippets>
键入“所有者”并双击 Tab 键将Application.CurrentWindows...
自动为您添加“”部分。