J'utilise simple extension de balisage pour que:
/// <summary>
/// Simple extension for icon, to let you choose icon with specific size.
/// Usage sample:
/// Image Stretch="None" Source="{common:Icon /Controls;component/icons/custom.ico, 16}"
/// Or:
/// Image Source="{common:Icon Source={Binding IconResource}, Size=16}"
/// </summary>
public class IconExtension : MarkupExtension
{
private string _source;
public string Source
{
get
{
return _source;
}
set
{
// Have to make full pack URI from short form, so System.Uri recognizes it.
_source = "pack://application:,,," + value;
}
}
public int Size { get; set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
var decoder = BitmapDecoder.Create(new Uri(Source),
BitmapCreateOptions.DelayCreation,
BitmapCacheOption.OnDemand);
var result = decoder.Frames.SingleOrDefault(f => f.Width == Size);
if (result == default(BitmapFrame))
{
result = decoder.Frames.OrderBy(f => f.Width).First();
}
return result;
}
public IconExtension(string source, int size)
{
Source = source;
Size = size;
}
public IconExtension() { }
}
utilisation Xaml:
<Image Stretch="None"
Source="{common:Icon Source={Binding IconResource},Size=16}"/>
ou
<Image Stretch="None"
Source="{common:Icon /ControlsTester;component/icons/custom-reports.ico, 16}" />
Je fais une erreur. Vous ne pouvez pas définir la propriété dans l'extension de balisage avec liaison (donc ne peut pas être ) Mais vous pouvez écrire facilement un convertisseur similaire, qui peut être utilisé avec une liaison: –
Nikolay
Je l'aime quand j'ai un problème WPF impair ... et je trouve une question et une réponse StackOverflow ... avec une solution élégante. Très agréable. +1 – cplotts
Est-ce que cela a un impact sur les performances lorsque vous utilisez plusieurs icônes sur un 'ListBox' par exemple? Serait sympa de _cache_ l'icône décodée, donc cela nécessite un décodage pour chaque taille d'icône. – JobaDiniz