绑定到全景标题的本地图像URL

时间:2014-03-24 11:02:21

标签: c# xaml windows-phone-8 windows-phone panorama-control

在标记副本之前,请阅读我的整个问题&努力。在我的应用程序中,我首先下载图像&保存在 local folder而不是隔离存储空间。然后我试图将本地图像URL(ms-appdata:///local/53077cab6ed10b742b00000c_cloud.png)绑定到全景标题,但它不起作用。任何人都可以告诉我有什么问题。鉴于我的尝试基于过去的SO答案。

1

<phone:Panorama Title="{Binding Settings.Logo.HighResolution, Converter={StaticResource DebugConverter}}">
    <phone:Panorama.TitleTemplate>
        <DataTemplate>
            <Grid Margin="130,80,0,0">
                <Image Height="200">
                    <Image.Source>
                        <BitmapImage UriSource="{Binding Converter={StaticResource DebugConverter}}" />
                    </Image.Source>
                </Image>
            </Grid>
        </DataTemplate>
    </phone:Panorama.TitleTemplate>
</phone:Panorama>

2:

<phone:Panorama Title="{Binding Settings.Logo.HighResolution, Converter={StaticResource DebugConverter}}">
    <phone:Panorama.TitleTemplate>
        <DataTemplate>
            <Grid Margin="130,80,0,0">
                <Image Height="200" Source="{Binding}"/>
            </Grid>
        </DataTemplate>
    </phone:Panorama.TitleTemplate>
</phone:Panorama>

3:

与#1&amp; #2但没有转换器。

我使用了两种类型的转换,但都没有。

public class DebugConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return new Uri(value.ToString());
        //return new System.Windows.Media.Imaging.BitmapImage(new Uri(value.ToString()));
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

3 个答案:

答案 0 :(得分:1)

尝试使用这样的转换器:

public class DebugConverter : IValueConverter
{
  public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
     BitmapImage temp = new BitmapImage();

     using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication())
     using (IsolatedStorageFileStream file = ISF.OpenFile((string)value, FileMode.Open, FileAccess.Read))
        temp.SetSource(file);
     return temp;
  }

  public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
  {
      throw new NotImplementedException();
  } 
}

我还没有尝试过上面的代码,但是如果您的图片保存到隔离存储,这应该可行。我只是不知道你传递的价值 - 它应该是一个字符串指向文件&#34; 53077cab6ed10b742b00000c_cloud.png&#34;没有ms-appdata。

编辑 - 评论

我已经使用这样的代码检查了在LocalFolder中创建的文件(例如):

StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile sampleFile = await localFolder.CreateFileAsync("dataFile.txt", CreationCollisionOption.ReplaceExisting);

在App的IsolatedStorage根文件夹中创建(可以使用IsolatedStorageFile创建相同的文件)。所以这些文件应该可以通过IsolatedStorage访问。

答案 1 :(得分:0)

使用类似的东西来获取附加为项目内容的图像

var resStream = Application.GetResourceStream(new Uri(PlaceHolderImageUrl, UriKind.RelativeOrAbsolute));

if(resStream != null && resStream.Stream != null && resStream.Stream.Length > 0)
    WriteableBitmap PlaceHolderWB =  PictureDecoder.DecodeJpeg(resStream.Stream);

我有一个转换器,但你可以做你认为合适的方式..

答案 2 :(得分:0)

您可以使用coding4fun SuperImage而不是常规图像,因为它支持将隔离存储作为图像的位置。

https://coding4fun.codeplex.com/