2013-09-30 43 views
0

我正在使用WPF重新設計我的WinForms應用程序,我只用了2周的時間,並且很快學會了我需要的許多控件需要自定義控件,而WPF允許我輕鬆設計這些。WPF FullScreen(MDI)但不是MDI

到目前爲止,我有一個MainWindow.xaml,Login.xaml和Menu.xaml,

這樣做是爲了顯示登錄的,經覈實,然後顯示在菜單如果關閉返回到主窗口中登錄該將全屏。

爲了使功能正常工作,我只是使用WindowStyle =「none」創建了登錄和菜單表單,並將它居中放置在屏幕上,這顯然不起作用,因爲仍然存在表單但未鏈接到主窗體。

在winforms中,我使用了MDI,但是閱讀這個論壇,看着問題MDI被皺起了眉頭,我看着選項卡控件。到目前爲止,我可以找到關於使用1表單來顯示它的教程,但找不到合適的教程去登錄>菜單>登錄

我不想被溺愛,這個項目只是一個實踐項目嘗試和去掌握WPF,但是有很多與這個主題有關的問題,每個人都以不同的方式處理它。

感謝

+2

我很高興聽到這個消息。 WPF岩石。 .Net開發人員應該接受它。你不會後悔這個決定=) –

回答

2

沒有創建過於複雜的答案,也沒有包括對您而言顯然是新的概念,如DelegateCommand(s)或WindowManager(s),這是全屏應用程序的一個簡單示例,它顯示了許多不同的「子窗口」 (這本身不是窗戶,而是用戶控件)

主窗口:

<Window x:Class="FullScreenAppSample.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     WindowState="Maximized" 
     WindowStyle="None"> 
</Window> 

代碼背後:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
    } 

    private void ShowLogin() 
    { 
     var loginview = new LoginView(); 
     this.Content = loginview; 
    } 

    private void ShowMenu() 
    { 
     var menu = new MenuView(); 
     this.Content = menu; 
    } 
} 

LoginView:

<UserControl x:Class="FullScreenAppSample.Login.LoginView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <!-- your login screen UI here --> 
</UserControl> 

MenuView:

<UserControl x:Class="FullScreenAppSample.Menu.MenuView" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <!-- your Menu UI here --> 
</UserControl> 

這是什麼可以被稱爲「觀第一」的方針,在查看通過採取實例其他的責任決定了應用程序的「流」意見並使其可見。


話雖這麼說,我要一分鐘的

每個人處理不同的看法

是解決你的說法。創建WPF應用程序的主流方法是MVVM,它被設想爲Martin Fowler's Presentation Model的WPF特定版本。然而,有許多解釋和許多不同版本的MVVM,以及許多MVVM Frameworks,例如MVVM Light,Caliburn.Micro和微軟的Prism(等等)。

這些框架中的每一個都提供了簡化大規模複雜WPF應用程序開發的基本工具(基類,幫助類,服務,抽象,事件聚合器以及其他)。底線:WPF中沒有明確的「正確方法」來處理View和ViewModel實例/管理,這取決於您的choice of MVVM Framework以及項目的具體情況,例如對可測試性的需求。我個人已經從幾個不同的框架中獲取了各種不同的部分和組件(以及概念),並構建了我自己的,ViewModel的第一MVVM方法。我建議你花一些時間來分析你的項目需求並考慮是否使用這些。

+0

嘿,再次,我聽取了你的建議,看到其他代碼的美麗決定接近並學習WPF。我假設在主窗口負載,我會打電話登錄?爲了表明它,接縫工作只是想確保我正確地調用它! 謝謝 –

+1

@JamesSmithyCleave是的,非常。儘管您可能需要將登錄邏輯和調用服務放入「ViewModel」中,而不是放在代碼後面。這就是這個答案的第二部分的重點,您不應該將業務邏輯置於代碼之後。 –

+0

謝謝我想我需要退後一步,看看MVVM上的一些教程,我非常熟悉cakephp和其他使用整個Model View Controller的框架,所以這個想法對我來說並不陌生! –

0

而是在「形式」和「窗口」思維的想到的,好像它是一個Web應用程序可能會如何設計這個應用程序。登錄「屏幕」可以簡單地是用戶控制放置在其他任何事物之上,防止用戶在顯示時與下面的任何控件進行交互。

也不要直接在對方內引用控件。相反,將事件添加到每個用戶控件,並將它們綁定到MainWindow中其他控件中的適當方法。