В итоге я использовал комбинацию из пары ответов здесь.Принятый ответ был поначалу полезен, но, как другие люди здесь отметили, установка 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.Если добавить следующее в «Инструменты» -> «Диспетчер фрагментов кода» -> «Мои фрагменты кода»:
<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>
Если вы наберете «владелец» и дважды нажмите клавишу табуляции, то добавится часть «Application.CurrentWindows...
»для вас автоматически.