WPF - Почему окно внезапно теряет фокус? - PullRequest
0 голосов
/ 27 января 2020

Сценарий

Рассмотрим сценарий: вы запускаете приложение в WPF.

  1. Открывается главное окно (немодально) Window1 (принадлежит MainWindow)
  2. Вы изменяете фокус на какое-то другое окно (скажем, Visual Studio)
    • Если у другого приложения есть фокус, вы нажимаете кнопку в Window1
    • Окно1 показывает окно сообщения
  3. Вы закрываете окно сообщения

Эффект: ваше главное окно внезапно становится ниже окна, выбранного на втором шаге.

Изображения:

Шаг 1

Step 1

Шаг 2

Step 2

Шаг 3

Step 3

Шаг 4

Step 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();
        }
    }
}

Вопрос

Как сохранить фокус в главном окне после закрытия окна сообщений из другого окна

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...