XAML,图像控制,本地存储图像

时间:2014-10-07 09:10:56

标签: c# xaml silverlight windows-phone-8 visual-studio-2013

第一个是第一个,我是.NET的新手,我是用Visual Basic 6开发的,但现在我正在尝试为Windows Phone 8.0制作一个应用程序。

此时我被困(可能是简单的)问题。

我有一个带控件的xaml页面,它是LongListSelector的一部分,它实现了一个Observable Collection of" Prenda"类。

        ...
        var prendasData = from r in db.Prendas select r;
        PrendasItems = new ObservableCollection<Prenda>(prendasData);
        llsPrendas.ItemsSource = PrendasItems;
        ...

XAML部分是下面的代码,拜托,我知道有些事情可能是错的,但我一个人学习,请耐心等待:D

        <phone:LongListSelector x:Name="llsPrendas" Margin="0,0,-12,0" ItemsSource="{Binding Prendas}" SelectionChanged="llsPrendasSelectionChanged">
                <phone:LongListSelector.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <Image Width="100" Height="100" Margin="5,0,0,0" Source="{Binding PrendaImageURI}" ImageFailed="errcargaimg"/>
                            <StackPanel Orientation="Vertical">
                                <TextBlock FontWeight="Normal"  Text="{Binding Nombre}" Margin="10,0,0,0" />
                                <TextBlock FontWeight="Normal"  Text="{Binding Precio}" Margin="10,0,0,0" />                                
                            </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                </phone:LongListSelector.ItemTemplate>
            </phone:LongListSelector>

问题是图像控制。它没有显示任何内容,如果我调试它,消息的错误是:&#34; AG_E_NETWORK_ERROR&#34;,用Google搜索此错误,我知道(在这种情况下)与&#34相同;文件没有发现&#34。但我确定那个文件存在。因为我在IsoSoreSpy上看到它,在/Shared/Media/ShellContent/WP_XXX.jpg,我认为隔离存储的根被称为isostore:/并且完整的URI必须是:isostore:/ Shared / Media / ShellContent / WP_XXX .JPG。

这个字符串在类中保存为字符串列,我创建了一个属性,使用该字符串使Uri用于在设计时绑定Image控件的Source属性。

(班级宣言的一部分)

            [Column]
            public string Foto 
            {
                get 
                { 
                    return foto; 
                }
                set 
                {
                    if (foto != value)
                    {
                        foto = value;
                        NotifyPropertyChanged("Foto");
                    }
                }
            }
            public Uri PrendaImageURI
            {
                get
                {
                    return new Uri(this.Foto, UriKind.Absolute);
                }
            }
我疯了,因为我无法理解为什么它不起作用。有人能帮助我吗? (抱歉我的英语不好)

4 个答案:

答案 0 :(得分:0)

您无法使用URI读取隔离存储,您必须使用IsolatedStorageFile类读取:

private static BitmapImage GetImageFromIsolatedStorage(string imageName)
{
    var bimg = new BitmapImage();
    using (var iso = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (var stream = iso.OpenFile(imageName, FileMode.Open, FileAccess.Read))
        {
            bimg.SetSource(stream);
        }
    }
    return bimg;
}

您可以从以下帖子中找到更多详细信息:

How get image from isolated storage

How to load an image from isolated storage into image control on windows phone?

答案 1 :(得分:0)

我用Pratik Goyal帮助解决了这个问题(非常感谢!),在课堂上创建了一个BitmapImage属性&#34; Prendas&#34;,获取了Foto字符串数据。稍后我会更加小心处理异常控制,但我认为这是一个好的开始。

    public BitmapImage ImageFoto
    {
        get
        {
            return GetImageFromIsolatedStorage(Foto);
        }

    }
    public BitmapImage GetImageFromIsolatedStorage(string imageName)
    {

        var bimg = new BitmapImage();
        using (var iso = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (var stream = iso.OpenFile(imageName, FileMode.Open, FileAccess.Read))
            {
                bimg.SetSource(stream);
            }
        }
        return bimg;
    }

答案 2 :(得分:0)

仅限孩子们:

Silverlight通过AG_E_NETWORK_ERROR / HRESULT = 0x80131500通知此情况。当然,在网络上的任何地方都找不到它,当然也意味着杰克和狗屎对我而言,不仅仅是对我而言。

答案 3 :(得分:-2)

是否会通知UI PrendaImageURI属性发生变化?

尝试添加

NotifyPropertyChanged("PrendaImageURI");

设置了Foto属性时。