2014-02-27 1 views
0

메인 윈도우 안에 프레임이 있고, 그 안에는 패널과 다양한 내용이있는 페이지가 있습니다. 메인 윈도우는로드 할 페이지를 결정한 다음 내용과 상호 작용해야합니다 (여기에 문제가 있음).프레임 내의 페이지 콘텐츠에 어떻게 액세스합니까?

나는 많은 솔루션을 시도하고 최선이를하지만, null 객체로 pageLogin를 반환 _mainFrame 물론 t의 MainWindow를 내부 프레임의 이름이고, Login.xaml가있다

_mainFrame.Source = new Uri(@"/Pages/Login.xaml", UriKind.Relative); 
    Page pageLogin = this._mainFrame.Content as Page; 

Login_panel Stackpanel 내부 콘텐츠

+0

을 Login.Xaml 상속합니까 에프 ROM 페이지? 또는 Window 또는 UserControl에서 상속합니까? – Rhyous

+0

또한 Visual Studio의 디버거에서 this._mainFrame.Content 실제 개체를 볼 수 있어야합니다. – Rhyous

+0

_mainFrame은 페이지를 완벽하게 보여 주지만 contens와 상호 작용해야합니다. – Fehu

답변

4

확인. 그래서 먼저, 저는 여러분이 시작하는 잘못된 방향으로 가고 있다고 생각합니다. 이 프로젝트를 확인하십시오. http://www.wpfsharp.com/2011/04/05/navigation-and-pages-using-model-view-viewmodel-mvvm/

이 예를보십시오 :

MainWindow.xaml

<Window x:Class="Test.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     Loaded="Window_Loaded" 
     > 
    <Grid> 
     <Frame Name="MainFrame" Source="/Login.xaml"></Frame> 
    </Grid> 
</Window> 

MainWindow.xaml.cs를

using System; 
using System.Windows; 
using System.Windows.Controls; 

namespace Test 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      var a = MainFrame.Content as Page; 
      var grid = a.Content as Grid; 
      var textBlock = grid.Children[0]; 
      // bla bla, you logged in 
      MainFrame.Source = new Uri("/Home.xaml", UriKind.Relative); 
      var b = MainFrame.Content as Page; // Still Login.xaml 
      MainFrame.ContentRendered +=MainFrame_ContentRendered; 
     } 

     private void MainFrame_ContentRendered(object sender, EventArgs e) 
     { 
      var b = MainFrame.Content as Page; // Is now Home.xaml 
     } 
    } 
} 

Login.xaml

<Page x:Class="Test.Login" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     mc:Ignorable="d" 
     d:DesignHeight="300" d:DesignWidth="300" 
    Title="Login"> 

    <Grid> 
     <TextBlock>This is a sample login page.</TextBlock> 
    </Grid> 
</Page> 
+0

해결책이라고 생각하지만 Window_Loaded는 해고되지 않습니다 ... (나는 여전히 C#의 멍청하다. /) – Fehu

+0

태그의 MainWindow.xaml에 Loaded = "Window_Loaded"를 추가 했습니까? – Rhyous

+0

감사합니다. 나는 중요한 것을 놓치고 있다는 것을 알고있었습니다. S 이제 해고되었지만 var grid = a에서 관리되지 않는 System.NullReferenceException을 던집니다.그리드로서의 콘텐츠; – Fehu

관련 문제