6

Tôi có tình huống rất giống với this guys question ở chỗ tôi có Trang đăng nhập là tệp MainPage.xaml của tôi nhưng tôi có một trang khác gọi là SetPassword.xaml mà tôi muốn tải nếu người dùng chưa đặt mật khẩu. Về cơ bản đây là lần đầu tiên ứng dụng tải sau khi ứng dụng được cài đặt.Windows Phone 8.1 kiểm tra xem thiết lập mật khẩu có tải trang mới

Tôi đã dành hàng giờ để SO thử các giải pháp khác nhau (bao gồm cả tôi đã liên kết) nhưng tôi không nhận được bất kỳ đâu và có vẻ như nhiều giải pháp cho WP7 hoặc WP8 và không có gì tương tự giải quyết cho WP8.1 mới.

Đây là kiểm tra cơ bản, sử dụng Windows.Storage mà tôi đang thực hiện để xem liệu mật khẩu đã được đặt hay chưa.

Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; 
Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; 

if (localSettings.Values["myPassword"] == null) 
{ 
    Debug.WriteLine("Password not set"); 
    this.Frame.Navigate(typeof(SetPassword)); 
} 
else 
{ 
    Debug.WriteLine("Password is set, continuing as normal"); 
} 

Nếu tôi thêm video này vào public MainPage() lớp tôi không có vấn đề trong ứng dụng trở về "Mật khẩu không được thiết lập" trong các thông điệp debug tuy nhiên this.frame.Navigate(typeof(SetPassword)) chuyển hướng không bao giờ tải xem setPassword.

Tôi cũng đã thử phương pháp này trong OnNavigatedTo với kết quả chính xác giống nhau.

Trong tệp App.xaml của tôi, tôi cũng đã thử một số phương pháp khác nhau, một lần nữa, với cùng một kết quả. Tôi có thể nhận được thông báo gỡ lỗi nhưng không nhận được điều hướng tôi đang tìm kiếm. Tôi đã xem xét việc triển khai phương thức trên Application_Launchingover here cũng như thực hiện điều hướng có điều kiện trên RootFrame.Navigating+= RootFrameOnNavigating;over here nhưng rõ ràng là tôi đang thiếu thứ gì đó.

Hy vọng rằng những người thông minh hơn có thể giúp tôi điều hướng hoạt động dựa trên giá trị có điều kiện?

+0

Vâng, người xây dựng trang chủ của bạn không phải là nơi để gọi điều hướng. Kiểm tra điều này, nó có thể giúp đỡ. http://blogs.msdn.com/b/ptorr/archive/2010/08/28/redirecting-an-initial-navigation.aspx Ngoài ra, bạn đã thử điều gì về 'RootFrameOnNavigating' không hoạt động? Hiển thị một số mã, mô tả tốt hơn cho vấn đề của bạn. Không chỉ đăng liên kết đến các câu hỏi khác. – Pantelis

+0

Tôi rất xấu hổ, tôi đã tìm ra và sẽ đăng giải pháp ngay bây giờ. – justinhartman

Trả lời

5

Giải pháp rất đơn giản. Để thực hiện điều hướng, tôi có thể đã thực hiện nó trong ứng dụng hoặc MainPage theo câu hỏi của tôi nhưng lý do điều hướng không hoạt động là vì tôi đã cố gắng điều hướng đến SetPassword.xaml là <ContentDialog> thay vì <Page>.

Tôi cảm thấy xấu hổ thực sự rằng tôi thậm chí không kiểm tra điều đó nhưng hy vọng nếu điều này xảy ra với người khác, họ có thể kiểm tra xem họ đang thực sự cố gắng điều hướng đến Trang và không phải bất kỳ loại yếu tố nào khác. Làm thế nào đáng buồn ngu ngốc của tôi!

EDIT:

Đây là những gì tôi OnLaunched trong file App.xaml trông giống như nơi tôi bây giờ có thể thực hiện kiểm tra của tôi và chuyển hướng đến một trang khác dựa trên giá trị được thiết lập.

protected override void OnLaunched(LaunchActivatedEventArgs e) 
{ 
    Frame rootFrame = Window.Current.Content as Frame; 

    if (rootFrame == null) 
    { 
     rootFrame = new Frame(); 
     rootFrame.CacheSize = 1; 

     Window.Current.Content = rootFrame; 

     // The following checks to see if the value of the password is set and if it is not it redirects to the save password page - else it loads the main page. 
     Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; 
     Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; 

     if (localSettings.Values["myPassword"] == null) 
     { 
      rootFrame.Navigate(typeof(SetPassword)); 
     } 
     else 
     { 
      rootFrame.Navigate(typeof(MainPage)); 
     } 
    } 

    if (rootFrame.Content == null) 
    { 
     if (rootFrame.ContentTransitions != null) 
     { 
      this.transitions = new TransitionCollection(); 
      foreach (var c in rootFrame.ContentTransitions) 
      { 
       this.transitions.Add(c); 
      } 
     } 

     rootFrame.ContentTransitions = null; 
     rootFrame.Navigated += this.RootFrame_FirstNavigated; 

     if (!rootFrame.Navigate(typeof(MainPage), e.Arguments)) 
     { 
      throw new Exception("Failed to create initial page"); 
     } 
    } 

    Window.Current.Activate(); 
} 
+0

Just FYI, dòng này trong mã là lỗi thời vì nó chưa bao giờ thực sự được sử dụng trong bất kỳ cách nào và có thể được loại bỏ: \t 'Windows.Storage.StorageFolder localFolder = Windows.Storage.ApplicationData.Current.LocalFolder; ' Thay vì chỉnh sửa bài đăng ở trên tôi đã tìm thấy nó sẽ chỉ tốt hơn để thêm nhận xét. – justinhartman

+0

Giải pháp này hoạt động như mong đợi nhưng tôi tự hỏi liệu có cách nào khác để giải quyết vấn đề này không.Có thể là một trang trung gian với viewmodel chăm sóc điều hướng có điều kiện. – vivekp

Các vấn đề liên quan