我在UWP应用中显示头像时使用BitmapImage
。有时头像会显示错误的图像(有时大小错误,有时甚至显示我从未在应用中使用过的图像)。
我在谷歌上搜索了一段时间,发现很少有人有同样的问题,但没有一个得到解决。例如,this和this。
下面是我的应用程序中的代码:
- . xaml格式*
<Image>
<Image.Source>
<BitmapImage UriSource="{x:Bind Patient.Gender, Mode=OneWay, Converter={StaticResource GenderToAvatarConverter}}" />
</Image.Source>
</Image>
- 性别到头像转换器. cs**
public sealed class GenderToAvatarConverter : IValueConverter
{
object IValueConverter.Convert(object value, Type targetType, object parameter, string language)
{
var imagePath = "ms-appx:///Assets/Avatar/Default.png";
if ((string)value == Gender.MALE.ToString())
{
imagePath = "ms-appx:///Assets/Avatar/Man.png";
}
else if((string)value == Gender.FEMALE.ToString())
{
imagePath = "ms-appx:///Assets/Avatar/Woman.png";
}
return new Uri(imagePath);
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
Displaying normally
Displaying wrong images
Displaying wrong images again
如果有人能解决这个问题或如何重现它,将不胜感激。
1条答案
按热度按时间p4rjhz4m1#
这是我找到的一种复制它的方法。
我有一个应用程序,其中有使用者,而使用者可以有影像。当您上载影像时,它会储存为0.png。BitmapImage会载入并显示它。然后我删除影像,因此影像文件夹是空的。接着我加入新的影像,并储存为0.png。这两个影像不同,但路径相同,BitmapImage控件会继续显示相同的影像。
由此,我假设当您从一个路径创建BitmapImage时,它首先检查其他地方是否已经创建了图像,然后该高速缓存来代替。(我还注意到您只能在UI线程上创建BitmapImage)。
为了解决这个问题,我发现你可以创建一个新的BitmapImage,并从流中加载它,而该图像将不会该高速缓存中找到。
只需添加一个转换器:
并像这样使用它: