在WPF中打开新窗口后,主窗口保持激活状态

吉日·巴图尔卡(JiříBatulka)

我有一个简单的Navigator类,该类保留我的Windows实例并打开/关闭它们。从主窗口打开新窗口时,我需要将新窗口置于顶部。问题是.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);
}

任何想法如何解决这个问题?

吉日·巴图尔卡(JiříBatulka)

因此,我发现问题完全出在其他地方。通过双击ListViewItem从ListView打开详细信息窗口。我在主窗口的UserControl XAML文件中像这样处理事件:

<i:Interaction.Triggers>
    <i:EventTrigger EventName="PreviewMouseDoubleClick">
        <i:InvokeCommandAction Command="{Binding OpenDetail}" CommandParameter="{Binding ElementName=ListViewScripts,Path=SelectedItem.DeploymentScriptID}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

事实证明,我要做的就是用MouseDoubleClick替换PreviewMouseDoubleClick。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章