在WindowsPhone 7应用程序中使用External ResourceDictionary

Der*_*ker 10 windows-phone-7

我正在尝试在外部DLL中创建一个名为DataTemplate.xaml的ResourceFile,并在WP7页面中使用它.当我在页面的标题中执行以下操作时出现错误

<ResourceDictionary Source="pack://application:,,,/WP7SharedClassLibrary;component/DataTemplate.xaml" />

错误是"当前项目不支持'应用程序'作为包URI的权限组件."

有没有其他人遇到这个并解决了这个问题?

Der*_*kin 13

我已设法使用以下步骤使其工作:

  1. 使用名为"WP7ExternalResourcesTest"的"Windows Phone应用程序"应用程序模板创建了标准WP7应用程序.
  2. 使用名为"WP7ExternalResourcesTestLibrary"的"Windows Phone类库"模板向同一解决方案添加了一个项目.
  3. 从库项目中删除了默认的Class.cs文件.
  4. 使用"XML文件"模板添加了名为"External.xaml"的文件,并将"Build Action"设置为"Page".
  5. 将以下XAML添加到新的XAML文件中:

    <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
        <SolidColorBrush x:Key="ForegroundBrush" Color="Red" />
    </ResourceDictionary>
    
    Run Code Online (Sandbox Code Playgroud)
  6. 构建了库项目,然后从WP7ExternalResourcesTest项目添加了对它的引用.
  7. 在WP7ExternalResourcesTest中,打开App.xaml并将该Application.Resources部分更改为以下内容:

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/WP7ExternalResourcesTestLibrary;component/External.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    
    Run Code Online (Sandbox Code Playgroud)
  8. 在MainPage.xaml中,添加Foreground="{StaticResource ForegroundBrush}"TextBlock命名的"PageTitle".
  9. 在模拟器中运行应用程序.最终结果是TextBlock正确显示红色的"页面名称"字样.

希望这可以帮助.


小智 1

我在尝试共享 XAML ResourceDictionary 文件时尝试了 pack 语法,并收到了相同的错误消息。我最终使用了这种语法,它对我有用。

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/MyDLLName;component/Folder/MyXAMLFile.xaml"/>                
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)