我正在使用FileToImageConverter
根据文件扩展名显示图片。
一切都适用于普通扩展.xlsx,.doc,.docx,因为我在Media文件夹中有该扩展名的图像,但如果文件名的扩展名不在项目的媒体文件夹中,那么图像正在显示。我想尝试为文件夹中没有扩展名的所有文件扩展名分配通用图像。
因此,如果文件是test.sql,则将类似file_extension_file.png的内容指定为通用图标。普通图标的存储方式与file_extension_xlsx.png
类似这是原始转换器
public class ConvertFileImageConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value as string == string.Empty) return null;
string file_extension = System.IO.Path.GetExtension(value.ToString());
file_extension = file_extension.Replace(".", "");
var file = @"/Media/file_extension_" + file_extension + ".png";
ImageSource src = new BitmapImage(new Uri(file, UriKind.Relative));
return src;
}
}
这仍然是尝试
if (value as string == string.Empty)
return null;
string file_extension = System.IO.Path.GetExtension(value.ToString());
file_extension = file_extension.Replace(".", "");
var file = @"/Media/file_extension_" + file_extension + ".png";
var genericfile = @"/Media/file_extension_file.png";
try
{
return new BitmapImage(new Uri(file, UriKind.Relative));
}
catch (FileNotFoundException exception)
{
return new BitmapImage(new Uri(genericfile, UriKind.Relative));
}
更新:以下是一些图片等。
这是将所有内容设置为默认图像,即使扩展名在文件夹中,也存在!文件。
private static ImageSource DefaultImage = new BitmapImage(new Uri(@"/Media/file_extension_file.png", UriKind.Relative));
public object Convert(object value,
Type targetType, object parameter, CultureInfo culture)
{
var filename = (string)value;
if(string.IsNullOrWhiteSpace(filename))
{
return DefaultImage;
}
var extension = Path.GetExtension(filename).Replace(".", string.Empty);
var imageName = @"/Media/file_extension_" + extension + ".png";
if (!File.Exists(imageName))
{
return DefaultImage;
}
return new BitmapImage(new Uri(imageName, UriKind.Relative));
}
传入的文件名看起来像test.doc,test.docx,test.sql,test.xls等。
本地人显示如下:突出显示的红色是它在媒体文件夹中查找的内容,但没有一个,所以我试图显示默认图像。
答案 0 :(得分:1)
如果您查看BitmapImage constructor documentation,则可以看到如果找不到 uriSource 参数指定的文件,它将抛出FileNotFoundException
。
因此,您应该捕获此异常并返回您的通用图像。
E.g:
try
{
return new BitmapImage(new Uri(file, UriKind.Relative));
}
catch (FileNotFoundException exception)
{
// log exception etc.
return new BitmapImage(new Uri(genericfile, UriKind.Relative));
}
catch (Exception exception)
{
// handle other exceptions
}
答案 1 :(得分:1)
我会使用File.Exists检查您的文件是否存在,如果没有返回默认图像。类似的东西:
public class ConvertFileImageConverter : IValueConverter
{
private static ImageSource DefaultImage = new BitmapImage(
new Uri(@"/Media/file_extension_file.png", UriKind.Relative));
public object Convert(object value,
Type targetType, object parameter, CultureInfo culture)
{
var filename = (string)value;
if(string.IsNullOrWhiteSpace(filename))
{
return null; // or return a default image
}
var extension = Path.GetExtension(filename).Replace(".", string.Empty);
var imageName = @"\Media\file_extension_" + extension + ".png";
if(!File.Exists(imageName))
{
return DefaultImage;
}
return new BitmapImage(new Uri(imageName, UriKind.Relative));
}
}