我有一个 WPF 应用程序。它有 3 个窗口,我需要按正确的顺序打开和关闭:工作窗口、请求窗口和用户信使窗口,为了简单起见,我们将它们命名为 Window1、Window2、Window3。 Window2 有一个消息按钮,可打开 Window3。但 Window1 中还有另一个按钮,可以同时打开 Window2 和 Window3。 我到底想实现什么:
我尝试过的: 我的初始代码:
var rw = new RequestWindow(Request, false);
var umw = new UserMessengerWindow(Request);
rw.Show();
umw.Topmost = true;
umw.ShowDialog();
实际发生的情况:它打开这些窗口,但是每当 Window3 关闭时,Window2 就会转到后面(在 Window1 后面)。 我尝试设置所有者属性:
var rw = new RequestWindow(Request, false);
var umw = new UserMessengerWindow(Request);
rw.Owner = Application.Current.Windows.OfType<WorkerWindow>().FirstOrDefault();
rw.Show();
umw.Topmost = true;
umw.ShowDialog();
现在,每当 Window3 关闭时,Window1 和 Window2 都会保留其原始 z 索引,但焦点会转到 Window1(并且它是可交互的,而我希望它不是),在 Window2 上使用 Focus() 或 Activate() 则不会帮助。
如果我正确理解你需要什么:
<Window x:Class="Core2024.SO.JamalShakhmurzaev.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Core2024.SO.JamalShakhmurzaev"
mc:Ignorable="d"
Title="Window1" Height="450" Width="800">
<UniformGrid Columns="1" Background="Yellow">
<Viewbox>
<TextBlock Text="First" Margin="5"/>
</Viewbox>
<Viewbox>
<Button Content="Open Second Window" Margin="5" Padding="15 5"
Click="OnOpenSecondWindow"/>
</Viewbox>
<Viewbox>
<Button Content="Open Third Window" Margin="5" Padding="15 5"
Click="OnOpenThirdWindow"/>
</Viewbox>
</UniformGrid>
<x:Code>
<![CDATA[
private void OnOpenSecondWindow(object sender, RoutedEventArgs e)
{
Window2 window2 = new Window2();
window2.Owner = this;
window2.ShowDialog();
}
private void OnOpenThirdWindow(object sender, RoutedEventArgs e)
{
Window2 window2 = new Window2();
window2.Owner = this;
window2.Loaded += delegate
{
Window3 window3 = new Window3();
window3.Owner = window2;
window3.ShowDialog();
};
window2.ShowDialog();
}
]]>
</x:Code>
</Window>
<Window x:Class="Core2024.SO.JamalShakhmurzaev.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Core2024.SO.JamalShakhmurzaev"
mc:Ignorable="d"
Title="Window2" Height="450" Width="800">
<UniformGrid Columns="1" Background="LightGreen">
<Viewbox>
<TextBlock Text="Second" Margin="5"/>
</Viewbox>
<Viewbox>
<Button Content="Open Third Window" Margin="5" Padding="15 5"
Click="OnOpenThirdWindow"/>
</Viewbox>
</UniformGrid>
<x:Code>
<![CDATA[
private void OnOpenThirdWindow(object sender, RoutedEventArgs e)
{
Window3 window3 = new Window3();
window3.Owner = this;
window3.ShowDialog();
}
]]>
</x:Code>
</Window>