【问题标题】:Use an External ResourceDictionary in a WindowsPhone 7 app在 WindowsPhone 7 应用程序中使用外部资源字典
【发布时间】:2011-01-24 22:35:13
【问题描述】:

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

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

错误是 "当前项目不支持 'application' 作为包 URI 的权限组件。"

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

【问题讨论】:

    标签: windows-phone-7


    【解决方案1】:

    我已经设法通过以下步骤使其工作:

    1. 使用名为“WP7ExternalResourcesTest”的“Windows Phone 应用程序”应用程序模板创建了一个标准的 WP7 应用程序。
    2. 使用名为“WP7ExternalResourcesTestLibrary”的“Windows Phone 类库”模板将项目添加到同一解决方案中。
    3. 从库项目中删除了默认的 Class.cs 文件。
    4. 使用“XML 文件”模板添加了一个名为“External.xaml”的文件,并将“构建操作”设置为“页面”。
    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>
      
    6. 构建库项目,然后从 WP7ExternalResourcesTest 项目中添加对其的引用。
    7. 在 WP7ExternalResourcesTest 中,打开 App.xaml 并将 Application.Resources 部分更改为以下内容:

      <Application.Resources>
          <ResourceDictionary>
              <ResourceDictionary.MergedDictionaries>
                  <ResourceDictionary Source="/WP7ExternalResourcesTestLibrary;component/External.xaml" />
              </ResourceDictionary.MergedDictionaries>
          </ResourceDictionary>
      </Application.Resources>
      
    8. 在 MainPage.xaml 中,将 Foreground="{StaticResource ForegroundBrush}" 添加到名为“PageTitle”的 TextBlock
    9. 在模拟器中运行应用程序。最终结果是TextBlock 正确地将“页面名称”字样显示为红色。

    希望这会有所帮助。

    【讨论】:

    • 噢!看起来我忘记了第 6 步 :-( 就我而言,我不仅要引用外部项目,还要引用外部项目所基于的另一个项目中的 WP_Utilities.DLL。感谢您的详细撰写!
    • 另外,我刚刚发现 WP8 不喜欢在引用的程序集名称中有句点。如果您无法使其正常工作,那可能是您的问题。
    • 那么您真的需要将 ResourceDictionary 放在单独的程序集中吗?
    【解决方案2】:

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

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/MyDLLName;component/Folder/MyXAMLFile.xaml"/>                
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    

    【讨论】:

    • 对我不起作用。在运行时给出“属性 /WP_Utilities;component/Resources/PerformanceProgressBar.xaml 值超出范围。[行:17 位置:37] --- 内部异常 --- KeyNotFoundException”错误。您的 MyXAMLFile.xaml 文件的构建类型是什么?
    【解决方案3】:

    Silverlight 不支持包 URI。这是 WPF 的一项功能。

    如果您检查 Silverlight 中 Image 对象的 Source 属性的类型,则它是 Uri。但在 WPF 中,源是一个依赖属性,类型为 ImageSource.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多