Сценарий
Рассмотрим сценарий: вы запускаете приложение в WPF.
- Открывается главное окно (немодально)
Window1
(принадлежит MainWindow
) - Вы изменяете фокус на какое-то другое окно (скажем, Visual Studio)
- Если у другого приложения есть фокус, вы нажимаете кнопку в
Window1
- Окно1 показывает окно сообщения
- Вы закрываете окно сообщения
Эффект: ваше главное окно внезапно становится ниже окна, выбранного на втором шаге.
Изображения:
Шаг 1
Шаг 2
Шаг 3
Шаг 4
Источники:
MainWindow.xaml
<Window x:Class="WpfApp1.MainWindow"
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:WpfApp1"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<StackPanel Orientation="Vertical">
<TextBox />
<Button Content="Open window" Click="Button_Click" />
</StackPanel>
</Grid>
</Window>
MainWindow.xaml.cs
namespace WpfApp1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window1 window1 = new Window1();
window1.Owner = this;
window1.Show();
}
}
}
Window1.xaml
<Window x:Class="WpfApp1.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:WpfApp1"
mc:Ignorable="d"
Title="Window1" Height="450" Width="800" ShowInTaskbar="False">
<Grid>
<Button Click="Button_Click"/>
</Grid>
</Window>
Window1.xaml.cs
namespace WpfApp1
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Test");
Close();
}
}
}
Вопрос
Как сохранить фокус в главном окне после закрытия окна сообщений из другого окна