2016-01-15 34 views
0

我有什麼應該是我正在處理的一個非常簡單的桌面應用程序,但我遇到了一些基本任務。我正在使用Visual Studio 2013.如何將Page1.xaml打開到MainWindow.xaml中

我從一個空白的WPF模板創建了一個項目。我創建了一個名爲Page1.xaml的新頁面,以配合默認的MainWindow.xaml窗口。

在我的MainWindow.xaml窗口中,我有Grid並且網格內部是一個Image。

<Grid MouseDown="Grid_MouseDown_1" Cursor="Hand" > 
    <Image Name="ImageIntro" Source="images/Stories-intro.jpg" Stretch="None" /> 
</Grid> 

網格有一個MouseDown事件,這樣我就可以檢測到用戶在網格內的任何地方點擊了。

private void Grid_MouseDown_1(object sender, MouseButtonEventArgs e) 
    { 

    } 

很基本,所有的作品和編譯按預期。

我遇到的問題是我無法在MainWindow.xaml的窗口中加載Page1.xaml。我不想打開一個單獨的窗口,我只想將Page1.xaml上的內容顯示在MainWindow.xaml的可見窗口內。

我用下面,但是當我點擊我的鏈接我得到一個錯誤的嘗試:類型「System.NullReferenceException」未處理的異常發生

private void Grid_MouseDown_1(object sender, MouseButtonEventArgs e) 
    { 
     Uri uri = new Uri("Page1.xaml", UriKind.Relative); 
     NavigationService ns = NavigationService.GetNavigationService(this); 
     ns.Navigate(uri);    
    } 

這不是一個瀏覽器應用程序,它只是一個桌面應用。第一個屏幕(MainWindow.xaml)應該點擊直到顯示第二個屏幕(Page1.xaml)。

我想讓Page1.xaml內容佔據MainWindow.xaml的整個窗口(對不起,但我不能強調這一點,我不想從MainWindow.xaml中獲取框架或任何內容,用戶在Page1.xaml上)。

我很新的桌面應用程序,但我有廣泛的知識.NET Web應用程序的C#。如果有更好的方法來實現這一點,我並不反對改變我所擁有的流程。例如,也許我不應該使用Window to Page導航,而應該使用Window to Window或別的東西。

我會想象這將是一個相對簡單的任務,但我還沒有找到任何工作,所以希望這裏有人能解釋它。

+0

我不記得GetNavigationService()需要任何參數 – fillobotto

+0

如果我從GetNavigationService()中刪除「this」,那麼代碼不會編譯。 –

+1

@FilippoB https://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationservice.getnavigationservice(v=vs.110).aspx將「DependencyObject」作爲參數。 – CodingGorilla

回答

1

在主窗口中創建一個框架

然後在事件處理

Page1 mypage=new Page1();//object of the page 1 

    frame.Navigate(mypage);//pass it to frame navigate method 
+0

謝謝,你和CodingGorilla指出我正確的方向。我添加了一個框架到MainWindow.xaml(在網格標籤內),然後在事件中使用Page1 mypage = new Page1( ); Frame1.Navigate(mypage); –

+0

歡迎你,如果上面的答案幫助你,請標記它接受 ,因爲它會幫助別人身體:) –

1

閱讀此MSDN鏈接,對該工作的要求說this(在您的代碼中)必須是Frame。我沒有在這裏看到任何XAML代碼,但我猜this是一個窗口。你需要一個框架來承載導航,所以你的MainWindow應該可能是只是的框架,並且你當前窗口的內容應該是「Page0」。

0

謝謝大家誰幫助,這裏是我使用的解決方案(我想,以確保代碼示例在未來任何人都有同樣的問題)。

我在我的MainWindow中添加了一個Frame。XAML頁面:

<Grid MouseDown="Grid_MouseDown_1" Cursor="Hand" > 
    <Image Name="ImageIntro" Source="images/Stories-intro.jpg" Stretch="None" /> 
    <Frame Name="Frame1" Content="" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
</Grid> 

然後添加以下到我的事件:

private void Grid_MouseDown_1(object sender, MouseButtonEventArgs e) 
    { 
     Page1 mypage = new Page1(); 
     Frame1.Navigate(mypage); 
    } 

這讓我點擊我的鏈接,在新頁面上,出現的Page1.xaml。還有一個導航欄出現在頂部,內容並沒有完全佔用MainWindow.xaml窗口,但我想我可以擺弄這些設置並將其放到我想要的位置。

非常感謝Filippo B,Nauman Ahmad和CodingGorilla的幫助。

相關問題