图像不显示在Windows Phone 8中

时间:2014-02-03 17:25:29

标签: c# xaml windows-phone-8

我在显示ApplicationData.Current.LocalFolder的图片时遇到问题。 我可以保存图片并将其存储在LocalFolder中,但是在Image控件或LongListSelector中显示图片时,图片不会显示。

以下是代码:

private async void StoreToFile(string imageFileName)
{
   StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(imageFileName, CreationCollisionOption.GenerateUniqueName);
   using (Stream current = await file.OpenStreamForWriteAsync())
   {
      await photoStream.CopyToAsync(current);
   }
}

以下是要绑定的代码:

var folder = ApplicationData.Current.LocalFolder;
var images = await folder.GetFilesAsync();
Recent.ItemsSource = images.ToList();

XAML代码:

<phone:PivotItem Name="pivot1" Header="item2" Background="White">
   <phone:LongListSelector x:Name="Recent" Margin="0,0,0,72" ItemsSource="{Binding lst}" >
      <phone:LongListSelector.ItemTemplate>
         <DataTemplate>
            <StackPanel>
               <Image  Source="{Binding Path}" Width="60"/>
            </StackPanel>
         </DataTemplate>
      </phone:LongListSelector.ItemTemplate>
   </phone:LongListSelector>
</phone:PivotItem>

我能够将路径绑定到TextBlock,并且能够看到确切的路径:

  

C:\数据\用户\ DefApps \应用程序数据{GUID} \本地\ bucket.png

但如果我绑定到图像源,图像就不会显示。

任何人都可以看到我做错了吗?

2 个答案:

答案 0 :(得分:0)

您需要使用msappx uri方案:

new Uri("ms-appx:///myimage.jpg");

答案 1 :(得分:0)

正如ToniPetrina在评论中所说 - 你无法绑定到Path,你的属性应该返回BitmapImage。我想到了两种方法:

  • 提供属性的特殊getter,它将返回BitmapImage(下面的一些代码)
  • 在绑定到IsolatedStorage图像时提供转换器 - here is very nice example

第一个解决方案的示例代码如下所示:
在Xaml:

<ListBox Name="myList" Grid.Row="2">
    <ListBox.ItemTemplate>
       <DataTemplate>
             <Image Source="{Binding GetImgSource}" Width="60"/>
       </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

在代码背后:

public class Images : INotifyPropertyChanged
{
   public event PropertyChangedEventHandler PropertyChanged;
   private string imgSource = "";
   public string SetImgSource // setter - string
   {
      set
      {
        imgSource = value;
        RaiseProperty("GetImgSource");
      }
   }
   public BitmapImage GetImgSource // getter - BitmapImage
   {
     get
     {
        if (String.IsNullOrEmpty(imgSource)) return null;
        BitmapImage temp = new BitmapImage();

        using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication())
          using (IsolatedStorageFileStream file = ISF.OpenFile(imgSource, FileMode.Open, FileAccess.Read))
              temp.SetSource(file);

        return temp;
     }
  }

  public void RaiseProperty(string property = null)
  {
      if (this.PropertyChanged != null)
          this.PropertyChanged(this, new PropertyChangedEventArgs(property));
  }
}

ObservableCollection<Images> myImg = new ObservableCollection<Images>();

myList.ItemsSource = myImg; // somewhere