Windows 8 App:为什么我必须在我的图像源URL中指定ms-appx:///?

时间:2012-10-06 22:17:20

标签: windows-8

我一直在查看XAML Images sample project和XAML来加载该示例中的图像,如下所示:

<Image Source="Assets/image1.jpg"/>

然而,在我自己的项目中,我发现我无法加载任何类似的图像。如果我尝试在处理ImageFailed时获得E_NETWORK_ERROR。相反,我发现我必须像这样使用ms-appx:///前缀:

<Image Source="ms-appx:///Assets/image1.jpg"/>

然后它有效。有什么想法,我的项目与导致这个问题的样本有什么不同?

4 个答案:

答案 0 :(得分:10)

您是否尝试过“<Image Source="/Assets/image1.jpg>”?

答案 1 :(得分:2)

我在Windows手机8上工作时使用了这个。

OrderImage1.Source = new BitmapImage(new Uri(&#34; /// Assets / images / order_bread.png&#34;));

答案 2 :(得分:1)

This behavior works - 在Windows 8 RTM / Visual Studio 2012 RTM中测试,可以确认不需要ms-appx://前缀。你使用什么构建?

您可能存在设置图像的方式或正在为其选择的构建操作的问题。

此外,这在How to load file resources (XAML) (Windows)

中有记录

答案 3 :(得分:1)

对于声明性图像,您不需要ms-appx命名空间(在XAML中声明的图像)。对于动态数据绑定图像,会创建一个新的位图实例,它需要此命名空间。

解决此问题的一个好方法是从实现命名空间的基础对象派生数据对象作为共享属性:

Private Shared _baseUri As New Uri("ms-appx:'''")

'//image handling
Private _image As ImageSource
Private _imagePath As String
Public Property Image As ImageSource
    Get
        If Me._image Is Nothing AndAlso Me._imagePath IsNot Nothing Then
            Me._image = New BitmapImage(New Uri(dataModelBase._baseUri, Me._imagePath))
        End If
        Return Me._image
    End Get

    Set(value As ImageSource)
        Me._imagePath = Nothing
        Me.SetProperty(Me._image, value)
    End Set
End Property