wpf - studio - metroframework icons
¿Cómo selecciona el icono de tamaño correcto de un archivo.ico de resolución múltiple en WPF? (3)
Si tengo un archivo de icono de resolución múltiple (.ico), ¿cómo puedo asegurarme de que WPF elija el tamaño correcto? ¿La configuración de la anchura y la altura de la imagen la fuerza, o WPF simplemente cambia el tamaño del primer icono en el archivo ico?
Esto es lo que estoy usando actualmente (funciona, pero me gustaría evitar el cambio de tamaño si eso es lo que está sucediendo).
<MenuItem.Icon>
<Image Source="MyIcons.ico" Width="16" Height="16" />
</MenuItem.Icon>
Me gustaría declarar esto en Xaml si es posible sin tener que codificarlo.
No parece ser posible utilizar Xaml solamente.
Si la razón por la que está preguntando es que el icono le parece borroso, consulte este excelente artículo sobre el tema que usé para resolver ese problema: http://blogs.msdn.com/dwayneneed/archive/2007/10/05/blurry-bitmaps.aspx
Tendrá que usar un control personalizado que no solo dimensiona exactamente el icono, sino que también garantiza que coincida exactamente con la cuadrícula de píxeles. Solo así evitarás la interpolación y, por tanto, la borrosidad.
Intentar encontrar información sobre su consulta sobre la selección del tamaño de la imagen en los iconos ... se publicará de nuevo si encuentro alguna ...
Yo uso la extensión de marcado simple para eso:
/// <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() { }
}
Uso de Xaml:
<Image Stretch="None"
Source="{common:Icon Source={Binding IconResource},Size=16}"/>
o
<Image Stretch="None"
Source="{common:Icon /ControlsTester;component/icons/custom-reports.ico, 16}" />