gpt4 book ai didi

wpf - 使用 WindowManager 重新激活退出窗口

转载 作者:行者123 更新时间:2023-12-02 15:17:31 26 4
gpt4 key购买 nike

我正在将 WPF 与当前最新、最好的版本 Caliburn.Micro (1.4.1) 一起使用。我用IWindowManager.ShowWindow(...)打开一个新的无模式窗口:

private void OpenOrReactivateInfoView()
{
if(this.infoViewModel == null)
{
this.infoViewModel = new InfoViewModel();
}

this.windowManager.ShowWindow(this.infoViewModel);
}

而不是每次OpenOrReactivateInfoView()时打开一个新窗口被调用时,我想检查窗口是否仍然打开,如果是,现有窗口应该重新获得焦点。

我们有什么好的 Calibrun.Micro 方法来解决这个问题?我确实希望避免在 View 模型中保留对窗口(或与此相关的任何 UIElement)本身的引用。另请注意,这是许多无模式对话框的常见行为,因此最好以通用的可重用方式解决此问题。

Caliburn.Micro 是否已经内置了此功能?

最佳答案

WindowManager 源代码总是创建一个新窗口,因此,如果您确实打算创建一个新窗口,那么您真正想做的只是使用 WindowManager.ShowWindow 方法。

您要做的第一件事是保存对 View 模型的持久引用,如下所示:

private readonly InfoViewModel infoViewModel = new InfoViewModel();
private void OpenOrReactivateInfoView()
{
this.windowManager.ShowWindow(this.infoViewModel);
}

然后,在您的 View 模型中,创建一个名为 Focus 的方法或您想要的任何方法,如下所示:

public void Focus()
{
var window = GetView() as Window;
if (window != null) window.Activate();
}

然后重新访问您的 OpenOrReactivateInfoView() 方法,进行如下轻微调整:

private void OpenOrReactivateInfoView()
{
if (!this.infoViewModel.IsActive)
this.windowManager.ShowWindow(this.infoViewModel);
else
this.infoViewModel.Focus();
}

这个方法对我有用。

关于wpf - 使用 WindowManager 重新激活退出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14582710/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com