4

我搜索并找到了很多关于 prism 登录屏幕的问题和答案。然而,他们似乎关心在 prism 甚至加载模块之前显示登录屏幕。我对此没有任何欲望。

我有我的外壳,在外壳中它有一个网格,其中包含各种充当区域的容器。这就是我希望用户登录时程序的外观。

在我进入这个屏幕之前,我想要一个连接模块占据整个应用程序窗口,通过连接按钮提示输入用户名、IP 地址和端口。我发现的问题是它似乎没有合适的位置导航到这个视图,这将允许我占据整个窗口。我能想到的唯一方法是在网格中设置一个跨越所有行和列的内容控制区域,这似乎以某种方式覆盖其余区域。

然而,这似乎很草率,而且肯定有比这更好的方法。我是否应该让我的 shell 只是一个内容控件,其中主应用程序控制器首先加载登录模块视图,然后当它连接时,它会触发一个它已连接的事件,这允许常规的“shell”视图在之后加载到它的位置登录视图被卸载和处理?

4

3 回答 3

2

创建一个用于登录的事件(假设您已阅读 EventAggregation)。然后为登录对话框创建一个包含视图/视图模型的登录模块,为模块本身创建一个类,并在初始化方法中,订阅 ShowLogin 事件并创建登录视图。然后在引导程序(或外壳程序)中,获取 ShowLogin 事件并发布到它。

于 2012-10-01T13:11:03.090 回答
0

按照 StockTrader 示例应用程序,您可以将应用程序配置为自动导出某些视图。我用我们的一个应用程序来做到这一点。我导出了由AutoPopulateExportedViewsBehavior(在 StockTrader 应用程序中找到)填充的“登录视图”。基本上,我的 Shell 有 1 个区域……我用我的登录视图填充该区域。同时,MainPage在同一地区注册。我显示登录视图,然后,当登录成功时,我请求导航以 MainPage使用区域管理器。

于 2012-10-01T13:53:26.683 回答
0

在您的 Shell 中创建一个区域,该区域包含需要在整个窗口中展开的视图。这是想法:

    <Grid>
    <Grid >
        <Grid.RowDefinitions>
            ....
        </Grid.RowDefinitions>

        <!--ROW 1 -->               
        <!--ROW 2-->
    </Grid>
<!--****THIS IS THE REGION****-->
    <ContentControl x:Name="ShellExpandAllRegions" prism:RegionManager.RegionName="{x:Static staticRegions:RegionConstants.ShellExpandAllRegions}" Panel.ZIndex="100"/>
</Grid>

注册您的模块初始化程序 (IModule)

RegionManager.RegisterViewWithRegion(RegionConstants.ShellExpandAllRegions,typeof(LoginView));

你的视图模型

RegionManager.RequestNavigate(RegionConstants.ShellExpandAllRegions, new Uri(typeof(LoginView).Name, UriKind.Relative)); // The handler for a login event

当您的视图在此区域中加载时,它应该占据整个窗口。

于 2012-10-01T13:53:54.680 回答