在共享的Windows Phone / Store应用程序中共享公共资源的最佳方法是什么?

时间:2014-07-28 16:30:45

标签: windows-phone

从单个Windows Phone和Windows Store(桌面)应用程序迁移到新的共享应用程序范例,我在它们之间共享资源时遇到问题。例如,具体来说,当我想要设置Pivot控件(及其子项)的样式时,我尝试将样式及其功能放入中央App.xaml文件中,我得到了Pivot控件(及其子项)的错误)当我知道它们在那里被描述时,在Windows.Phone.Controls(.Primitives)程序集中找不到。

但是,当我在页面中内嵌相同的样式或在Windows.Phone文件夹部分的单独资源字典中放置时,样式可以正常工作。这似乎打败了拥有应该共享公共资源的一体化应用系统的目的。在通过多个SO答案,论坛和MSDN系统跋涉之后,我找不到解决此问题的直接解决方案。

在新的共享Windows应用解决方案的Windows Phone和Windows Store部分之间共享公共资源的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

首先,在App.xaml文件资源中未定义Pivot控件的原因是它对Windows Phone系统是特定的 - 它不是以相同的方式在Windows应用商店中定义的(Windows应用商店应用使用集线器控件) ,这非常相似)。因此,在共享Windows Phone / Store应用程序的两个部分之间适当地共享资源的方法是:

1)在两个文件夹系统中创建通常命名的资源字典文件,但只有这些组件与Phone到Store实现不同(Pivot vs. Hub就是一个例子)。例如,在BOTH文件夹系统(电话和商店)中创建StylesResources.xaml字典。

2)在"共享"中创建真正的SHARED资源词典。文件夹系统。例如,在MyApp.Shared文件夹系统中创建一个StringResources.xaml字典ONCE。

3)不要将任何资源直接放入MyApp.Shared文件夹系统中的App.xaml文件中 - 而是将所有共享和非共享字典合并到那里,如下所示:

<Application
    x:Class="MyApp.App"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="MyApp">

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ColorResources.xaml" />
                <ResourceDictionary Source="ControlResources.xaml" />
                <ResourceDictionary Source="DimensionResources.xaml" />
                <ResourceDictionary Source="FontResources.xaml" />
                <ResourceDictionary Source="StyleResources.xaml" />
                <ResourceDictionary Source="StringResources.xaml" />
                <ResourceDictionary Source="TemplateResources.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

</Application>

在上面的示例中,只有StringResources.xaml和ColorResources.xaml位于MyApp.Shared文件夹中......其余的是在电话和商店文件夹系统中创建的重复字典名称。

当系统为Phone编译时,它使用合并的Phone词典,并在编译该系统时使用Store词典。这样,您就不必在各个页面中重复声明 - 您可以共享COMMON资源并仅单独定义与Phone到Store不同的资源。

(这是有道理的,因为,例如,在构建Pone vs. Store时,您的边距和字体可能会有所不同,反之亦然。)