当我的应用程序显示主窗口加上一个较小的模态窗口(使用ShowDialog打开)时,我遇到ALT / TAB问题。 当我使用ALT / TAB转到另一个应用程序然后返回到我的应用程序时,只有模态窗口显示,主窗口已消失。它只是一个光学的东西。没有功能问题。主窗口有ShowInTaskbar =" False"因为我不希望用户能够使用ALT / TAB将非活动主窗口带到前面。 有人知道这个问题的解决方案吗?
答案 0 :(得分:1)
我制作了这个非常简单的样本:
在您的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>
在codebehind中
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;
目的是在模态窗口中的Activated和Deactivated事件中处理此功能。
希望它有所帮助。
(如果您正在使用MVVM,那么您必须重构以在WindowService类或使用EventToCommand方法处理此问题)
编辑&gt;&GT;&GT;当ShowInTaskbar =“False”时,这适用于您的情况。 =)