2012-08-06 169 views
4

我搜索了很多關於棱鏡登錄屏幕的問題和答案。然而,他們似乎擔心在棱鏡甚至加載模塊之前顯示登錄屏幕。我不想那樣做。PRISM登錄屏幕

我有我的外殼,並在它的外殼有一個網格與各種容器充當地區。這是我希望程序在用戶登錄時的樣子。

在我進入此屏幕之前,我想要一個連接模塊佔用整個應用程序窗口,以提示用戶名,IP地址和端口一個連接按鈕。我發現的問題是沒有合適的位置,它似乎導航到這個視圖,這將允許我佔據整個窗口。我能想到的唯一方法就是在網格中包含一個跨越所有行和列的內容控制區域,這似乎以某種方式覆蓋了其餘區域。

然而,這看起來很sl and,當然還有比這更好的方法。我應該讓我的shell只有一個內容控件,其中一個主應用程序控制器首先加載登錄模塊視圖,然後當它連接時它會觸發一個事件,它連接它允許常規「外殼」視圖在其位置後加載登錄視圖被卸載並處理?

回答

1

創建登錄事件(假設您已經閱讀過EventAggregation)。然後創建一個包含用於登錄對話框的視圖/視圖模型的登錄模塊,爲模塊本身和初始化方法創建一個類,訂閱ShowLogin事件並創建登錄視圖。然後在引導程序(或shell)中,獲取ShowLogin事件併發布給它。

0

繼Stock Stockder示例應用程序後,您可以配置您的應用程序以自動導出某些視圖。我用我們的一個應用程序來做到這一點。我導出了我的「登錄視圖」,該視圖由AutoPopulateExportedViewsBehavior(位於StockTrader應用程序中)填充。基本上,我的殼牌有1個地區...我用我的登錄視圖填充該地區。與此同時,MainPage在同一地區註冊。我顯示登錄視圖,然後,當登錄成功時,我請求使用區域管理器導航到MainPage

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 

當你的視圖加載到這個區域時,它應該佔據整個窗口。