Solución:
Aquí hay un truco para acceder a la imagen en el archivo de recursos:
Acceder a la imagen desde el archivo de recursos en el marcado XAML
Primero debe agregar una referencia a las propiedades del proyecto como esta:
xmlns:properties="clr-namespace:MyProject.Properties"
Y luego acceda a él a través de XAML de esta manera:
<image source="{Binding Source={x:Static properties:Resources.ImageName}}" />
Puede usar PNG / JPG / BMP así como un archivo ICO, pero todos recomiendan PNG.
para que la solución de Qorbani funcione, agregue un convertidor a la fuente de imagen.
XAML: espacios de nombres
xmlns:properties="clr-namespace:YourNameSpace.Properties"
xmlns:converter="clr-namespace:YourNameSpace.Converter"
Xaml – Recurso (UserControl o Ventana)
<UserControl.Resources>
<ResourceDictionary>
<converter:BitmapToImageSourceConverter x:Key="BitmapToImageSourceConverter" />
</ResourceDictionary>
</UserControl.Resources>
Código Xaml
<StackPanel Orientation="Horizontal">
<Image Width="32" Height="32" Source="{Binding Source={x:Static properties:Resources.Import}, Converter={StaticResource BitmapToImageSourceConverter}}" Stretch="Fill" />
<TextBlock Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center">Import</TextBlock>
</StackPanel>
BitmapToImageSourceConverter.cs
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows.Media.Imaging;
namespace YourNameSpace
{
public class BitmapToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var bitmap = value as System.Drawing.Bitmap;
if (bitmap == null)
throw new ArgumentNullException("bitmap");
var rect = new Rectangle(0, 0, bitmap.Width, bitmap.Height);
var bitmapData = bitmap.LockBits(
rect,
ImageLockMode.ReadWrite,
System.Drawing.Imaging.PixelFormat.Format32bppArgb);
try
{
var size = (rect.Width * rect.Height) * 4;
return BitmapSource.Create(
bitmap.Width,
bitmap.Height,
bitmap.HorizontalResolution,
bitmap.VerticalResolution,
PixelFormats.Bgra32,
null,
bitmapData.Scan0,
size,
bitmapData.Stride);
}
finally
{
bitmap.UnlockBits(bitmapData);
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
no puedes hacer eso. que funcionó solo en formas de viento
ver esta publicación para más información
Diferentes formas de agregar imágenes a los recursos.
usa el método que se muestra en esta publicación
Recursos de imágenes de WPF
en lugar de
cita:
Si va a utilizar la imagen en varios lugares, entonces vale la pena cargar los datos de la imagen solo una vez en la memoria y luego compartirlos entre todos. Image
elementos.
Para hacer esto, cree un BitmapSource
como recurso en alguna parte:
<BitmapImage x:Key="MyImageSource" UriSource="../Media/Image.png" />
Luego, en tu código, usa algo como:
<Image Source="{StaticResource MyImageSource}" />
En mi caso, encontré que tenía que configurar el Image.png
archivo para tener una acción de compilación de Resource
en lugar de solo Content
. Esto hace que la imagen se lleve dentro de su ensamblado compilado.