【问题标题】:WPF: XAML as Resource or PageWPF:XAML 作为资源或页面
【发布时间】:2018-07-02 12:11:38
【问题描述】:

对于 WPF 项目,可以将 *.xaml 文件编译为 PageResource

Resource 直接将原始 *.xaml 文件存储在程序集的资源中。这适用于没有代码后面且没有“特殊”行为的文件。这意味着简单的 <ResourceDictionary> 文件可以正常工作,除了与主题相关的文件 (Theme\Generic.xaml)。

设置为Page 的文件被编译成BAML 文件并存储在资源中。这支持原始 *.xaml 文件支持的所有内容以及所有特殊情况和代码隐藏内容。

在一个测试项目中,我找不到两种方法之间的任何显着差异。 Resource 方法的缺点是不检查文件。意味着它不必包含合法的 XAML 代码。如果将<ResourceDictionary> 存储为ResourcePage 一样,如何将其包含到Window 中并使用内容。

我自然会将文件设置为Page 以进行错误检查。我看不出使用Resource 方法的原因。在the documentation 中,首先提到了将文件处理为Resource 的方法,但没有说明为什么有人会将它用于*.xaml 文件。

所以问题是: 是否有理由将 WPF XAML 文件设置为 Resource

【问题讨论】:

    标签: .net wpf xaml msbuild


    【解决方案1】:

    是否有理由将 WPF XAML 文件设置为 Resource?

    这取决于您的要求。如果希望编译器将 XAML 编译成 BAML,则应将 Build Action 设置为 Page

    如果您想要一个松散的未编译 XAML 文件,您可以将 Build Action 设置为 Content

    如果您想将松散的 XAML 文件作为资源嵌入到程序集中,而不是出于某种原因将其作为内容复制到输出文件夹,您可以将 Build Action 设置为 Resource。您是否要这样做或这样做是否“有理由”取决于您的具体要求。

    但我不建议您更改默认的 Build ActionPage,除非您有理由这样做。

    【讨论】:

    • 奇怪的是,我在问题中链接的页面中的第一个示例展示了将 XAML 文件声明为Resource 而不是Page 的方法。这对我来说是令人困惑的部分,为什么他们会首先展示这个变体。
    • 嗯,文档举例说明了如何使用资源文件。 XAML 内容只是一个示例。它还指出“如果将 XAML 文件配置为资源项……原始 XAML 将编译为程序集,而不是原始 XAML 的二进制版本。”所以没有理由感到困惑。正如我所说,除非您有理由这样做,否则不要更改默认构建操作。
    猜你喜欢
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    相关资源
    最近更新 更多