не все окна приложений показывают после ухода и возвращения с помощью ALT/TAB

69
5

Когда мое приложение показывает главное окно плюс поверх этого небольшого модального окна (которое было открыто с помощью ShowDialog), у меня проблема с ALT/TAB. Когда я перехожу в другое приложение с помощью ALT/TAB, а затем возвращаюсь в свое приложение, появляется только модальное окно, основное окно исчезло. Это только оптическая вещь. Функциональной проблемы нет. Главное окно имеет ShowInTaskbar = "False", потому что я не хочу, чтобы пользователь мог выводить на передний план неактивное главное окно с ALT/TAB. Кто-нибудь знает решение этой проблемы?

спросил(а) 2017-05-05T14:49:00+03:00 3 года, 4 месяца назад
1
Решение
56

Я сделал этот очень простой пример:

В вашем MainWindow.xaml

<Window x:Class="SampleDialog.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Button Content="Show Dialog" Click="ButtonBase_OnClick"></Button>
</Grid>
</Window>

В кодебе

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
new Dialog(this).ShowDialog();
}
}

В Dialog.xaml

<Window x:Class="SampleDialog.Dialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Dialog" Height="300" Width="300"
Activated="Dialog_OnActivated" Deactivated="Dialog_OnDeactivated">
<Grid>

</Grid>
</Window>

И в Dialog codebehind

public partial class Dialog : Window
{
public Dialog()
{
InitializeComponent();
}

public Dialog(MainWindow main)
: this()
{
_main = main;
}

private void Dialog_OnActivated(object sender, EventArgs e)
{
Topmost = _main.Topmost = true;
}

private void Dialog_OnDeactivated(object sender, EventArgs e)
{
Topmost = _main.Topmost = false;
}

private readonly MainWindow _main;

Цель состоит в том, чтобы обрабатывать эту функциональность в активированных и деактивированных событиях в вашем модальном окне.

Надеюсь, поможет.

(Если вы используете MVVM, тогда вы должны реорганизовать его для обработки в классе WindowService или с помощью метода EventToCommand)

EDIT >>> Это работает для вашего случая, когда ShowInTaskbar = "False". знак равно

ответил(а) 2017-05-05T15:13:00+03:00 3 года, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема