【问题标题】:Will WPF process an App.xaml file if the hosting application isn't WPF?如果宿主应用程序不是 WPF,WPF 会处理 App.xaml 文件吗?
【发布时间】:2010-10-16 14:41:29
【问题描述】:

首先我只想说我是 WPF 新手,所以请原谅我的无知...

我正在为 Rhino 4.0 创建一个 .Net 插件。通过该插件,我正在使用 WPF 开发 UI。

Rhino 4.0 CAD 引擎是一个 MFC/Win32 应用程序。该插件将在应用程序运行后执行,并创建 WPF 窗口,然后将 MFC 窗口“吸”入其中。

所以我的问题是,如果托管应用程序不是 WPF 应用程序,WPF 是否会查找 App.xaml 文件以获取应用程序级资源?

如果不是,那么存储应用级资源的最佳方式是什么?

谢谢,

杰森

【问题讨论】:

    标签: wpf mfc resources rhino


    【解决方案1】:

    App.xaml 用作部分类 App 的一部分:应用程序。 如果您的应用程序没有基于 WPF 的 Application 类, 您可以手动加载字典并与应用程序合并并创建一个主窗口并显示它(通过 Application 类的静态方法访问)。

    代码是这样的。

    var reader = new XamlReader();
    var dictionary = reader.read("path to xaml file") as ResourceDictionary;
    if (dictionary != null)
        Application.MergedDictionaries.Merge(dictionary);
    
    var mainWindow = new MyMainWindow();
    mainWindow.Show();
    

    【讨论】:

      【解决方案2】:

      默认情况下,WPF 项目将为您的应用程序生成一个入口点。此入口点为您构造和初始化您的Application 派生类。如果需要,您可以随时手动创建实例,并在其中存储应用级资源:

      App app = new App();
      app.InitializeComponent();
      app.Run();
      

      【讨论】:

      • 这听起来像是最好的方法,但在执行时找不到 App.xaml 页面中指定的任何资源。我尝试了“pack://,,”方法和“组件/路径”方法,以及直接路径。没有一个会起作用。 Visual Studio 可以找到它们,但在运行时它们会失败。
      【解决方案3】:

      您是否尝试过将资源存储在 MSDN 所说的“主题级别”?

      在名为“<root>\Themes”的文件夹中有一个名为 generic.xaml 的文件。

      我还没有为不是 WPF 应用程序的项目尝试过这种方法,但这种方法可能对你有用。

      【讨论】:

      • 谢谢,我会尽快试一试。
      【解决方案4】:

      我的猜测是它与 rhino 如何运行你的插件有关它是作为一个单独的进程运行它还是只是调用你定义的一些东西?

      如果它确实调用了您定义的函数,那么您可以将启动窗口的代码放在那里吗?

      【讨论】:

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