【发布时间】:2014-09-13 19:30:07
【问题描述】:
我有一个 WPF/Prism/MVVM 应用程序,它带有一个登录屏幕,后面跟着几个用户屏幕(客户摘要、订单详细信息等)。登录屏幕比其他屏幕小。从登录屏幕切换到下一个屏幕时如何调整窗口大小?
【问题讨论】:
-
出于好奇,为什么不use separate Windows,或者有一个以登录为中心的全尺寸窗口?
我有一个 WPF/Prism/MVVM 应用程序,它带有一个登录屏幕,后面跟着几个用户屏幕(客户摘要、订单详细信息等)。登录屏幕比其他屏幕小。从登录屏幕切换到下一个屏幕时如何调整窗口大小?
【问题讨论】:
我也有同样的需求,不确定我所做的是否“正确”,但它确实有效。我最终做的是创建一个“ShellWindowService”。然后注册该服务(我使用 Unity)并公开一个 ChangeWindowSize 函数。
然后基本上,我可以通过 DI 或点击 ServiceLocator 访问服务
ServiceLocator.Current.GetInstance<Common.Services.ShellWindowService>();
现在,我可以使用此服务在应用程序的任何位置更改 shell 窗口的大小,只需使用 ShellWindowService。
【讨论】:
我使用INavigationAware 暴露的OnNavigatedTo 来拦截导航并更改主窗口大小,代码如下所示:
public void OnNavigatedTo(NavigationContext navigationContext)
{
var activeView = navigationContext.NavigationService.Region.ActiveViews.First() as UserControl;
var window = Window.GetWindow(activeView);
window.Width = activeView.Width;
window.Height = activeView.Height;
}
【讨论】: