2011-02-17 47 views
26

我是WPF的新手,並開發了一個新的桌面應用程序,其中包含幾個「窗口」,如儀表板,事件查看器,圖表查看器等等。本質上,用戶將在這些視圖中的一個之間切換,這將覆蓋整個屏幕而不僅僅是其中的一部分。我應該使用頁面,窗口還是用戶控件

目前我卡我是否應該創建一個新的窗口,Page或UserControl每個儀表盤,事件查看器,圖表觀衆等

我已經做了一些閱讀和理解頁面建成導航這反過來讓我保持導航的歷史,所以我可以回去/前進。但是我不認爲我需要我的桌面應用程序的功能。

所以我可以使用UserControl或窗口?或者應該每個應用程序只有一個窗口?

我已經搜索了大約一個小時,試圖找出三者之間的差異,似乎無法拿出正確的答案。

由於

回答

35

窗口已事像標題欄(包括最小/最大/關閉按鈕,等等),並且可以用於託管XAML元件,例如用戶控制。

您當然不限於每個應用程序使用一個窗口,但某些應用程序會選擇該模式(一個窗口,託管各種UserControls)。

當你創建一個新的WPF應用程序,默認情況下您的應用程序配置(在App.xaml中)是這樣的:

<Application x:Class="WpfApplication1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     StartupUri="MainWindow.xaml"> 
    <Application.Resources> 

    </Application.Resources> 
</Application> 

StartupUri屬性告訴應用程序打開其中第一個窗口(您可以配置此如果你願意的話)

如果你想你的窗口在邏輯上分開成片,不希望在一個文件太多XAML,你可以做這樣的事情:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:WpfApplication1" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="50" /> 
      <RowDefinition /> 
     </Grid.RowDefinitions> 

     <local:HeaderUserControl Grid.Row="0" /> 
     <local:MainSectionUserControl Grid.Row="1" /> 
    </Grid> 
</Window> 

其中HeaderUserControlMainSectionUserControl是UserControls,根據需要封裝該窗口的各個方面。

如果你想顯示的另一個窗口,你可以在代碼中調用ShowShowDialog上要顯示新窗口的實例...

而且 - 是的,一個頁面的一部分WPF瀏覽器應用程序,旨在在Internet Explorer中查看。

+0

那麼正確的實現就是一個包含page或usercontrol的窗口。當用戶在視圖之間切換時,我更改了顯示的頁面/用戶控件? – n00b 2011-02-17 05:59:16

9

頁面可以在瀏覽器中使用,而不是用於獨立應用程序。

Window類表示一個頂級對象,也就是說,它並不意味着被包含在另一個控件中。所有使用Windows操作系統(如果它們是WPF應用程序)時看到的窗口都將通過從Window類派生而創建,並且您將使用Window類創建自己的窗口。

UserControl類可讓您創建新的自定義控件,以防萬一標準控件尚不存在您所需的內容。用戶控件可以包含在窗口或其他控件中,但窗口不包含在任何內容中(這是最大的區別!)