wpf – 使用WindowManager重新激活退出窗口
发布时间:2020-12-14 03:58:51 所属栏目:Windows 来源:网络整理
导读:我正在使用 WPF和当前最新版本的Caliburn.Micro(1.4.1).我使用 IWindowManager.ShowWindow(…)打开一个新的无模式窗口: private void OpenOrReactivateInfoView(){ if(this.infoViewModel == null) { this.infoViewModel = new InfoViewModel(); } this.win
我正在使用
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方式来解决这个问题?我确实希望避免在viewmodel中保留对窗口(或任何UIElement)的引用.另请注意,这是许多无模式对话框的常见行为,因此最好以通用的可重用方式解决此问题. Caliburn.Micro是否已经拥有内置的手段? 解决方法
一种相当直接的方法来实际跟踪你的窗口
必须实现IViewAware将保留弱引用的字典 到您的ViewModel和Views一起检查,然后检查您是否已经 是否有现有的窗口.可以作为装饰器来实现 WindowManager,子类或扩展. 假设你没有,那么像下面这样简单的东西应该可以做到 public class MyFancyWindowManager : WindowManager { IDictionary<WeakReference,WeakReference> windows = new Dictionary<WeakReference,WeakReference>(); public override void ShowWindow(object rootModel,object context = null,IDictionary<string,object> settings = null) { NavigationWindow navWindow = null; if (Application.Current != null && Application.Current.MainWindow != null) { navWindow = Application.Current.MainWindow as NavigationWindow; } if (navWindow != null) { var window = CreatePage(rootModel,context,settings); navWindow.Navigate(window); } else { var window = GetExistingWindow(rootModel); if (window == null) { window = CreateWindow(rootModel,false,settings); windows.Add(new WeakReference(rootModel),new WeakReference(window)); window.Show(); } else { window.Focus(); } } } protected virtual Window GetExistingWindow(object model) { if(!windows.Any(d => d.Key.IsAlive && d.Key.Target == model)) return null; var existingWindow = windows.Single(d => d.Key.Target == model).Value; return existingWindow.IsAlive ? existingWindow.Target as Window : null; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- windows-7 – 更改脱机文件的网络路径
- .NET Compact Framework(Windows Mobile 6.1,SQLServerCE)是
- Windows 2012 R2启动按钮无法通过RDP工作
- Windows安装程序 – DISABLEADVTSHORTCUTS = 1禁用所有快捷
- 如何在Windows上获取多个文件的所有权?
- windows-server-2012-r2 – 在文件服务器集群上存储用户配置
- 如何使用Powershell授予远程启动/停止服务的权限?
- windows-server-2008 – 非递归地更改Windows权限
- rest – Microsoft Graph API选择并过滤日历中的所有者地址
- windows – 运行bat文件后保持命令窗口打开