在Silverlight的Frame
上,我希望能够导航到Page
的现有实例。简而言之,这就是我想要的:
Page p = ...; // initialize the page and set some of the properties
contentframe.Navigate(p);
而不是使用从中创建页面的Uri。
是否可以实现(如在WPF中),或者框架是否应该由ContentControl
替换?
修改:更清晰:有没有办法可以在Silverlight中模拟WPF中可用的NavigationService.Navigate(object root)
?
答案 0 :(得分:0)
你的问题似乎真的很混乱。
框架是否应该由ContentControl替换?
这意味着你没有充分的理由在那里拥有框架并且你没有使用导航框架。在这种情况下,您当然应该用其他东西替换Frame
。
如果你可以用其他东西替换框架,那么你的“页面”不需要Page
类型,它也可以是UserControl
。
这一切都可以归结为拥有这个简单的Xaml: -
<Border x:Name="content" />
和这个cs: -
UserControl p = ...;
content.Child = p;
修改强>:
您需要保留框架,因此无法使用ContentControl替换它。
您可以直接将Page
分配给Frame
Content
媒体资源。但是我不确定如果你再单击后退按钮会发生什么。我怀疑它会导航到您替换页面之前的页面。
另一种选择是向我们提供静态服务以将页面属性推送到堆栈,然后您可以在初始化时将页面从该堆栈中弹出。这将允许您使用Uri导航到您的页面。
答案 1 :(得分:0)
您遇到的问题与我面临的问题相同。事件发生在框架外,页面不知道事件已经发生,但需要通知该事件。
现在可以做的是强制该框架内的页面刷新自己或通过1处理这些事件:暂时存储页面的状态,以及b)通过查询字符串传递“命令”。