WPF 更改图像路径并在运行时显示新图像
WPF Changing image path and show the new image in Runtime
我有 WPF 图片,它的来源是我硬盘上的本地图片 URI,我正在使用转换器加载它。
我想修改硬盘上的镜像(换成另一个)
并在 运行时 显示新图像
这里是图片XAML
<Image Stretch="Fill">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Source" Value="{Binding ImagePath,Converter={StaticResource ImageFileLoader},UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</Image.Style>
</Image>
这是转换器
class ImageFileLoader : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
string filePath = value.ToString();
if (File.Exists(filePath))
{
BitmapImage result = new BitmapImage();
result.BeginInit();
result.UriSource = new Uri(filePath);
result.CacheOption = BitmapCacheOption.OnLoad;
result.EndInit();
return result;
}
}
return null;
}
}
注意:我试图将转换器中的 CacheOption
更改为 BitmapCacheOption.None
或任何其他选项......它没有用,因为在这种情况下我无法改变硬盘上的图像磁盘
当框架加载 Image
时,它会对其进行烦人的控制,因此如果您尝试删除或移动实际的图像文件,您会收到 Exception
提示比如无法访问该文件,因为它正在被使用。为了解决这个问题,我创建了一个像你一样的 IValueConverter
,以便将 Image.CacheOption
设置为 BitmapCacheOption.OnLoad
,在加载时将整个图像缓存到内存中,从而取消保留。
但是,我的 Converter 中的代码看起来与您的类似,所以我不确定为什么它不适合您。这是我的 IValueConverter
代码的样子:
using (FileStream stream = File.OpenRead(filePath))
{
image.BeginInit();
image.StreamSource = stream;
image.CacheOption = BitmapCacheOption.OnLoad;
image.EndInit();
}
我有 WPF 图片,它的来源是我硬盘上的本地图片 URI,我正在使用转换器加载它。
我想修改硬盘上的镜像(换成另一个) 并在 运行时 显示新图像
这里是图片XAML
<Image Stretch="Fill">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Source" Value="{Binding ImagePath,Converter={StaticResource ImageFileLoader},UpdateSourceTrigger=PropertyChanged}"/>
</Style>
</Image.Style>
</Image>
这是转换器
class ImageFileLoader : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
string filePath = value.ToString();
if (File.Exists(filePath))
{
BitmapImage result = new BitmapImage();
result.BeginInit();
result.UriSource = new Uri(filePath);
result.CacheOption = BitmapCacheOption.OnLoad;
result.EndInit();
return result;
}
}
return null;
}
}
注意:我试图将转换器中的 CacheOption
更改为 BitmapCacheOption.None
或任何其他选项......它没有用,因为在这种情况下我无法改变硬盘上的图像磁盘
当框架加载 Image
时,它会对其进行烦人的控制,因此如果您尝试删除或移动实际的图像文件,您会收到 Exception
提示比如无法访问该文件,因为它正在被使用。为了解决这个问题,我创建了一个像你一样的 IValueConverter
,以便将 Image.CacheOption
设置为 BitmapCacheOption.OnLoad
,在加载时将整个图像缓存到内存中,从而取消保留。
但是,我的 Converter 中的代码看起来与您的类似,所以我不确定为什么它不适合您。这是我的 IValueConverter
代码的样子:
using (FileStream stream = File.OpenRead(filePath))
{
image.BeginInit();
image.StreamSource = stream;
image.CacheOption = BitmapCacheOption.OnLoad;
image.EndInit();
}