在 WPF 中打开新窗口后主窗口不断激活

我有一个简单的 Navigator 类,它保留窗口的实例并打开/关闭它们。当我从主窗口打开一个新窗口时,我需要新窗口位于顶部。问题是 .Focus() 和 .Activate() 都不起作用。新窗口只是闪烁,然后主窗口再次激活,即使我从未明确激活它。我用来打开新窗口的方法如下:


public Task OpenDetailAsync(int? deploymentScriptID = null)

{

    if (_detailWindow == null)

    {

        var source = new TaskCompletionSource<bool>();

        _detailWindow = new DetailWindow { DataContext = _detailViewModelFactory.Create(deploymentScriptID, this) };

        _detailWindow.Closed += (sender, e) => source.TrySetResult(true);

        _detailWindow.WindowStartupLocation = WindowStartupLocation.CenterScreen;

        _detailWindow.Show();

        _detailWindow.Activate();

        _detailWindow.Focus();

        return source.Task;

    }

    else

    {

        ShowMessageBox("foreign language you wouldn't understand", "lol");

        return null;

    }

}

因此,当我将 Navigator 类的实例注入主窗口的 DataContext,然后使用它打开详细信息窗口时,详细信息窗口被激活,闪烁,然后主窗口再次被激活,当我使用主窗口中的以下委托:


public ListWindow()

{

    InitializeComponent();

    Activated += ListWindow_Activated;

}


private void ListWindow_Activated(object sender, EventArgs e)

{

    Console.WriteLine(DateTime.Now);

}

有什么想法如何解决这个问题吗?


蝴蝶刀刀
浏览 188回答 1
1回答

MM们

所以我发现问题完全出在其他地方。通过双击 ListViewItem 从 ListView 打开详细信息窗口。我在主窗口的 UserControl XAML 文件中处理该事件,如下所示:<i:Interaction.Triggers>&nbsp; &nbsp; <i:EventTrigger EventName="PreviewMouseDoubleClick">&nbsp; &nbsp; &nbsp; &nbsp; <i:InvokeCommandAction Command="{Binding OpenDetail}" CommandParameter="{Binding ElementName=ListViewScripts,Path=SelectedItem.DeploymentScriptID}" />&nbsp; &nbsp; </i:EventTrigger></i:Interaction.Triggers>事实证明,我所需要做的就是用 MouseDoubleClick 替换 PreviewMouseDoubleClick。
打开App,查看更多内容
随时随地看视频慕课网APP