Ответ 1
Свойство Source
не "хочет" строку, оно просто преобразует ее, когда она ее получает. Если вы добавите значок в ресурсы, он будет иметь тип System.Drawing.Icon
. Вам нужно будет преобразовать его в конвертер ImageSource
через.
Вы можете сделать статический доступ к ресурсам, но он должен соответствовать ожидаемому синтаксису x:Static
.
например.
xmlns:prop="clr-namespace:Test.Properties"
<Image MaxHeight="100" MaxWidth="100">
<Image.Source>
<Binding Source="{x:Static prop:Resources.icon}">
<Binding.Converter>
<vc:IconToImageSourceConverter/>
</Binding.Converter>
</Binding>
</Image.Source>
</Image>
public class IconToImageSourceConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
var icon = value as System.Drawing.Icon;
var bitmap = icon.ToBitmap();
//http://stackoverflow.com/info/94456/load-a-wpf-bitmapimage-from-a-system-drawing-bitmap/1069509#1069509
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ms.Position = 0;
BitmapImage bi = new BitmapImage();
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
return bi;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
Примечания:
- Модификатор доступа к ресурсам должен быть общедоступным.
- Если изображение добавлено как "Изображение", вы получите вместо
Bitmap
значокBitmap
, для которого требуется другой конвертер