2011-03-07 43 views
1

在silverlight中的Frame我希望能夠導航到Page的現有實例。總之這是我想要的:在silverlight中導航到現有頁面實例

Page p = ...; // initialize the page and set some of the properties 
contentframe.Navigate(p); 

而不是使用從中創建頁面的Uri。

這可以實現(如在WPF中),還是應該將框架替換爲ContentControl

編輯:更清晰:有沒有辦法可以在Silverlight中模擬WPF中的NavigationService.Navigate(object root)

回答

0

你的問題似乎真的很困惑。

框架應該被ContentControl替換嗎?

這意味着你沒有足夠的理由讓框架擺在首位,而且你沒有使用導航框架。在這種情況下,你應該用別的東西代替Frame

如果您可以用其他東西替換框架,則不需要「頁面」爲Page類型,它可能也是UserControl

它,說到底做下來有這個簡單的XAML: -

<Border x:Name="content" /> 

這個CS: -

UserControl p = ...; 
content.Child = p; 

編輯

你需要保持框架因此您無法使用ContentControl替換它。

您可能只需將您的Page直接分配給FrameContent屬性。不過,我不確定如果您點擊後退按鈕,會發生什麼情況。我懷疑它會導航到您替換頁面之前的頁面。

另一種選擇是向我們提供靜態服務以將您的頁面屬性推送到堆棧,然後您可以在初始化時將頁面彈出它們。這將允許您使用Uri導航到您的頁面。

+0

如果可能,我想保持導航。在WPF中,您有一個'NavigationService.Navigate(Object root)'方法和'NavigationService.Navigate(Uri uri)'方法。在Silverlight中,第一個缺失並且喜歡爲此提供解決方案/替代方案。 – Cornelius 2011-03-07 13:27:56

+0

@Cornelius:看我的編輯。 – AnthonyWJones 2011-03-07 13:37:46

0

您面臨的問題與我面臨的問題相同。事件發生在框架之外,並且頁面不知道事件已經發生,但需要通知該事件。

現在可以做的是強制該頁面內的頁面刷新自己或處理這些事件1:臨時存儲頁面的狀態,和b)通過查詢字符串傳遞「命令」。