【问题标题】:Should Prism RequestNavigate work with no UI?Prism RequestNavigate 应该在没有 UI 的情况下工作吗?
【发布时间】:2015-10-12 19:03:34
【问题描述】:

我有一个启用 Prism 4.0 的 WPF 应用程序,它广泛使用 RequestNavigate,并且运行良好。我有一个场景,我想将我的部分 UI 渲染为图像并将其存储以供以后从 Windows 服务使用。我已经知道如何使用 RenderTargetBitmap 来生成图像,但是每当我的代码尝试调用 RequestNavigate 时,什么都没有发生。我正在调用引导程序,所以我希望所有类型都已加载,但它只是无法正常工作。谁能告诉我这是否可能? RequestNavigate 是否有任何固有的东西阻止它在没有 UI 时工作?

各个步骤: 首先,我在 MefBootstrapper 上调用 Run。这会将所有程序集加载到 AggregateCatalog 中。

然后,我使用 MEF CompositionContainer.GetExportedValue 创建一个 WPF UserControl,该用户控件具有一个分配了 RegionManager.RegionName 的 ContentControl。这总是可以很好地创建初始 UserControl。

最后,我调用 MefRegionManager.RequestNavigate 并使用我的 UserControl 上的区域名称以及我希望它加载的另一个 UserControl 的路径。这无法加载我尝试导航到的 UserControl。

如果这些是我遵循的唯一步骤,那么无论我是从 Windows 服务运行还是从我的 WPF 应用程序中运行,最终的 UserControl 都无法加载。但是,如果我在调用 RequestNavigate 之前调用 SetRegionManager 从主机 UserControl 中显式添加区域,那么只要代码从 WPF 应用程序中运行,最后一个 UserControl 就会正确加载。如果从我的 Windows 服务运行相同的代码,那么它仍然无法加载。

【问题讨论】:

  • 您的问题不够详细。你是什​​么意思你打电话给引导程序?您在 WPF 应用程序中,但没有 UI?当您调用 RequestNavigate 时,您从哪个对象(Region、ReginManager 等)中调用它?您在 RequestNavigate 方法调用中导航到什么?请提供更多细节和代码 sn-ps 以帮助更清楚地绘制图片。您是否正在尝试导航到动态图像?

标签: wpf prism


【解决方案1】:

RequestNavigate 就是这样,一个导航到已加载(但非活动)区域的请求。它本身不会进行任何加载。您需要单独管理视图的加载(包括视图中的视图)。

如果您的嵌套用户控件仅在父级中过载,并且您不需要在运行时对其进行管理,那么您可以使用 ViewDiscovery。您预先注册所有视图,然后在创建区域时,它会查找(并加载)所有嵌套视图。如果你需要在运行时管理视图、切换视图等,那么你可以使用ViewInjection

对于ViewDiscovery,在您模块的ModuleInit 类的Initialize 方法中,插入以下行:

_regionManager.RegisterViewWithRegion("RegionNameOfYourNestedControl",
  () => this.container.Resolve<NestedUserControl>());

然后当您的区域被加载时,NestedUserControl 将自动加载到您的 ContentControl(区域)中。

有关 ViewDiscovery、ViewInjection 和 UI 组合的更多详细信息,have a read of the prism documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 1970-01-01
    • 2019-01-14
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多