离开并使用ALT / TAB返回后,并非所有应用程序窗口都显示

时间:2017-05-05 11:49:22

标签: c# wpf vb.net

当我的应用程序显示主窗口加上一个较小的模态窗口(使用ShowDialog打开)时,我遇到ALT / TAB问题。 当我使用ALT / TAB转到另一个应用程序然后返回到我的应用程序时,只有模态窗口显示,主窗口已消失。它只是一个光学的东西。没有功能问题。主窗口有ShowInTaskbar =" False"因为我不希望用户能够使用ALT / TAB将非活动主窗口带到前面。 有人知道这个问题的解决方案吗?

1 个答案:

答案 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”时,这适用于您的情况。 =)