开发者

Use an External ResourceDictionary in a WindowsPhone 7 app

I am trying to create an ResourceFile Called DataTemplate.xaml in an external dll and use that in a WP7 page. When I do the following in the header of my Page I get an error

<ResourceDictionary Source="pack://application:,,,/WP7SharedClassLibrary;com开发者_运维技巧ponent/DataTemplate.xaml" />

The error is "Current project does not support 'application' as the authority component of the pack URI."

Has anyone else come across this and solved this?


I've managed to get this to work using the following steps:

  1. Created a standard WP7 application using the "Windows Phone Application" application template called "WP7ExternalResourcesTest".
  2. Added a project to the same solution using the "Windows Phone Class Library" template called "WP7ExternalResourcesTestLibrary".
  3. Removed the default Class.cs file form the library project.
  4. Added a file called "External.xaml" using the "XML file" template and set the "Build Action" to "Page".
  5. Added the following XAML to the new XAML file:

    <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. Built the library project, and then added a reference to it from the WP7ExternalResourcesTest project.
  7. In WP7ExternalResourcesTest, opened App.xaml and changed the Application.Resources section to the following:

    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="/WP7ExternalResourcesTestLibrary;component/External.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
    
  8. In MainPage.xaml, added Foreground="{StaticResource ForegroundBrush}" to the TextBlock named "PageTitle".
  9. Ran the application in the emulator. The end result was that the TextBlock correctly displayed the words "page name" in red.

Hope this helps.


I tried the pack syntax while trying to share XAML ResourceDictionary files and got the same error message. I ended up using this syntax and it worked for me.

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


Silverlight doesn't support pack URIs. It's a WPF feature.

If you examine the type of the Source property for the Image object in Silverlight it is Uri. But in WPF the source is a dependency property with a type of ImageSource.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜