我已经在另一个问题中发布了这个,但不知道链接它是否更好,其他人也可能有更好的想法。顺便说一句,我正在绑定图像路径。
这是我在项目中最终得到的结果(我不得不说,测试似乎几乎可以工作的不同事物需要很长时间)。你可以看到注释代码也不能工作 100% 不记得为什么)
所以我所有以“ms-appx:”开头的应用程序资产中的图像我都使用设置源而不加载到流,因为这些永远不会改变(默认图像等)
由用户创建或更改的其他图像我必须重新加载并使用文件读取的结果设置源(否则当它们被更改时,有时它们不会更新)
所以基本上我在几乎所有我使用可以改变的图像的地方使用这个转换器(不改变他们的名字)。
定义你的转换器:
<converters:ImageConverter x:Key="ImageConverter" />
然后像这样使用
<Image Source="{Binding PictureFilename, Converter={StaticResource ImageConverter}}"
HorizontalAlignment="Center"
VerticalAlignment="Center"/>
(另一种解决方法是以不同的方式命名您的图像,然后当您更新源路径时它可以正常工作。)
public class ImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
try
{
var CapturedImage = new BitmapImage();
CapturedImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
if (((string)value).StartsWith("ms-appx:"))
{
CapturedImage.UriSource = new Uri((string)value, UriKind.RelativeOrAbsolute);
return CapturedImage;
}
var file = (StorageFile.GetFileFromPathAsync(new Uri((string)value, UriKind.RelativeOrAbsolute).LocalPath).AsTask().Result);
using (IRandomAccessStream fileStream = file.OpenAsync(FileAccessMode.Read).AsTask().Result)
{
CapturedImage.SetSource(fileStream);
return CapturedImage;
}
}
catch (Exception e)
{
Logger.Error("Exception in the image converter!", e);
return new BitmapImage();
}
//BitmapImage img = null;
//if (value is string)
//{
// img = new BitmapImage();
// img.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
// img.UriSource = new Uri((string)value, UriKind.RelativeOrAbsolute);
//}
//if (value is Uri)
//{
// img = new BitmapImage();
// img.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
// img = new BitmapImage((Uri)value);
//}
//return img;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}