2016-10-23 3 views
-1

У меня есть XAML, как это:WPF XAML Image.Source Binding Поддерживаемые типы

<Image Source="{Binding MyImage}" /> 

Где лучше документация к каким типам собственности Источник по умолчанию (без отдельного преобразователя) могут связываться?

бонус:

Существуют ли различия в .NET версии?

Я не свяжусь в XAML с моделью. Поэтому, пожалуйста, не обращайтесь к коду как «Image.Source = ...;».

Что я обнаружил до сих пор:

здравый смысл Ответ:

  • любой класс, производный от ImageSource

MSDN документация в основном бесполезен:

MSDN Image Control

Исходное свойство: Получает или задает ImageSource для изображения.

MSDN Image.Source Property

XAML значения
imageUri
System.String
URI, из файла изображения

Самый полезный ответ я нашел в .net source:

  • строка (Uri-подобный путь)
  • байт []
  • поток
  • Ури
+0

Вы уже перечислены все типы, которые в свойство может быть привязано без конвертера привязки: 'ImageSource' и' string', 'Uri',' Stream' и 'byte []' путем преобразования встроенного типа (классом ImageSourceConverter). Для любого другого типа источника вам понадобится конвертер привязки. – Clemens

+0

Где документация для этого? даже здесь нет ничего полезного: https://msdn.microsoft.com/en-us/library/system.windows.media.imagesourceconverter(v=vs.110).aspx – jens

+0

Хотя WPF очень хорошо документирован (IMO), все еще есть пробелы. Но есть и * Reference Source *, который вы уже нашли. Обратитесь к этому. – Clemens

ответ

0

Идея ImageSourceConverter является правильным. Возможный способ - реализовать собственный конвертер для поддержки различных типов в качестве источника. Для этого нам нужно написать конвертер, который преобразует разные типы в объект типа ImageSource.Вот первый подход:

[ValueConversion(typeof(object), typeof(ImageSource))] 
public class CustomImageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     ImageSource returnSource = null; 

     if (value != null) 
     { 
      if (value is byte[]) 
      { 
       //Your implementation of byte[] to ImageSource 
       returnSource = ...; 
      } 
      else if (value is Stream) 
      { 
       //Your implementation of Stream to ImageSource 
       returnSource = ...; 
      } 
      ...   
     } 
     return returnSource; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotSupportedException(); 
    } 
} 

Используя экземпляр этого Converter, вы можете передавать различные типы источников в качестве объекта для вашего изображения:

<Image Source="{Binding MyImage, Converter={StaticResource MyCustomImageConverter}}"/> 
Смежные вопросы