【问题标题】:Navigate to existing instance of page in silverlight导航到 silverlight 中的现有页面实例
【发布时间】:2011-03-07 13:15:16
【问题描述】:

在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)

【问题讨论】:

    标签: c# silverlight silverlight-4.0 navigation


    【解决方案1】:

    你的问题似乎真的很困惑。

    是否应该用 ContentControl 替换框架?

    这意味着您首先没有充分的理由将框架放在那里,并且您没有使用导航框架。在这种情况下,您当然应该将 Frame 替换为其他内容。

    如果您可以用其他东西替换框架,则您的“页面”不需要为Page 类型,它也可以是UserControl

    可以归结为拥有这个简单的 Xaml:-

    <Border x:Name="content" />
    

    还有这个cs:-

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

    编辑

    您需要保留框架,因此不能用 ContentControl 替换它。

    您可能只是将您的 Page 直接分配给 Frame Content 属性。但是,我不确定如果您单击后退按钮会发生什么。我怀疑它会导航到您替换的页面之前的页面。

    对我们来说,另一种选择是使用静态服务将您的页面属性推送到堆栈中,然后您的页面可以在初始化时将它们从堆栈中弹出。这将允许您使用 Uri 导航到您的页面。

    【讨论】:

    • 如果可能的话,我想保持导航。在 WPF 中,您有一个 NavigationService.Navigate(Object root) 方法和一个 NavigationService.Navigate(Uri uri) 方法。在silverlight 中,第一个缺失了,这可能是一种解决方法/替代方法。
    【解决方案2】:

    您面临的问题与我面临的问题相同。框架外发生了一个事件,页面不知道该事件已经发生,但它需要收到该事件的通知。

    现在可以做的是强制该框架内的页面刷新自身或按 1 处理这些事件:临时存储页面的状态,以及 b) 通过查询字符串传递“命令”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多