2016-10-23 8 views
-1

Ich habe XAML wie folgt aus:WPF XAML Image.Source unterstützt Binding-Typen

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

Wo ist der beste Dokumentation, welche Arten der Source-Eigenschaft standardmäßig (ohne gesonderte Wandler) binden, kann?

Bonus:

Gibt es Unterschiede in .NET-Versionen?

Ich möchte XAML an ein Viewmodel binden. Also bitte kein Codebind wie "Image.Quelle = ...;".

Was ich bisher entdeckt:

gemeinsame Antwort Sinn:

  • jede Klasse von Image abgeleitet

MSDN-Dokumentation ist meist nutzlos:

MSDN Image Control

Quelleigenschaft: Ruft die ImageSource für das Image ab oder legt diese fest.

MSDN Image.Source Property

XAML-Werte
imageUri
System.String
Ein URI der Bilddatei

Die nützliche Antwort, die ich in der gefunden ist .net Quelle ImageSourceConverter.cs:

  • string (Uri-like-Pfad)
  • byte []
  • Stream-
  • Uri
+0

Sie haben bereits alle Arten aufgeführt, dass die Eigenschaft kann ohne einen bindenden Konverter gebunden werden: 'ImageSource' und' string', 'Uri',' Stream' und 'byte []' durch eingebaute Umwandlung (durch die ImageSourceConverter-Klasse). Für jeden anderen Quelltyp benötigen Sie einen bindenden Konverter. – Clemens

+0

Wo ist die Dokumentation dafür? auch hier ist nichts brauchbar: https://msdn.microsoft.com/en-us/library/system.windows.media.imagesourceconverter(v=vs.110).aspx – jens

+0

Obwohl WPF ist sehr gut dokumentiert (IMO), Es gibt immer noch Lücken. Aber es gibt auch die * Referenzquelle *, die Sie bereits gefunden haben. Siehe dazu. – Clemens

Antwort

0

Die Idee des ImageSourceConverter ist richtig. Eine Möglichkeit besteht darin, einen eigenen Konverter zu implementieren, um verschiedene Typen als Quelle zu unterstützen. Um dies zu tun, müssen wir einen Konverter schreiben, der verschiedene Typen in ein Objekt vom Typ ImageSource konvertiert.Hier ist ein erster Ansatz:

[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(); 
    } 
} 

durch eine Instanz dieses Converter verwenden, Sie in der Lage sind zu verschiedenen Quelltypen als Objekt zu Ihrem Bild übergibt:

<Image Source="{Binding MyImage, Converter={StaticResource MyCustomImageConverter}}"/>