2009-10-13 5 views
1

Voici une classe qui convertit une chaîne (provenant d'une base de données d'un serveur SQL) en une image. Comment puis-je appeler une fonction de conversion à partir d'un contrôle XAML Image, de sorte que lorsque j'ouvre un enfant, je vais voir l'image d'un employé en fonction de quelle ligne a été choisie dans le formulaire principal. Fondamentalement, ma question est - puis-je appeler une fonction de conversion qui traduira le texte de la photo à une image lors de l'exécution ?. J'ai essayé quelque chose comme ça ... J'ai utilisé du code pour le faire avant, mais je voudrais le faire directement à partir de XAML.Convertisseur ConvertBase64ToImage de XAML dans Silverlight 3

XAML: -

<Image x:Name="EmpPic" 
Source=Text="{Binding Photo, Mode=TwoWay, Converter={StaticResource PhotoConverter}" 
    HorizontalAlignment="Center" 
Width="165" 
Height="160" 
    Margin="2,2,2,2"/> 

Code: -

using System; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Ink; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using System.IO; 
using System.Windows.Media.Imaging; 
using System.Windows.Data; 

namespace SL3Demo.Utility 
{ 
    //public class PhotoConverter : IValueConverter 
    //{ 
    // //public BitmapImage ConvertBase64ToImage(string base64String) 
    // //{ 
    // // //Convert Base64 String to byte[] 
    // // byte[] imageBytes = Convert.FromBase64String(base64String); 

    // // BitmapImage bi = new BitmapImage(); 
    // // bi.SetSource(new MemoryStream(imageBytes)); 

    // // return bi; 
    // //} 
    //} 

    public class PhotoConverter 
    { 
     public BitmapImage PhotoConvert(string value) 
     { 
      byte[] imageBytes = Convert.FromBase64String(value.ToString()); 
      BitmapImage bi = new BitmapImage(); 
      bi.SetSource(new MemoryStream(imageBytes)); 

      return bi; 
     } 



    } 

} 

Répondre

0

Sa proximité, mais a besoin d'un peu plus de travail. Tout d'abord le code, vous avez besoin d'une mise en œuvre de IValueConverter: -

public class PhotoConverter : IValueConverter 
{ 
    private BitmapImage PhotoConvert(string value) 
    { 
     BitmapImage bi = null; 
     if (!String.IsNullOrEmpty(value)) 
     { 
      byte[] imageBytes = Convert.FromBase64String(value); 
      bi = new BitmapImage(); 
      bi.SetSource(new MemoryStream(imageBytes)); 
     } 

     return bi; 
    } 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return PhotoConvert((string)value); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Maintenant, vous devez faire une instance de ce convertisseur disponible en XAML, un bon endroit serait le dictionnaire Ressources UserControls: -

<UserControl ...Usual set of xmlns here... 
    xmlns:utils="clr-namespace:SL3Demo.Utility;assembly=SL3Demo"> 

    <UserControl.Resources> 
    <utils:PhotoConverter x:Key="PhotoConverter" /> 
    </UserControl.Resources> 

Puis, plus tard dans l'image: -

<Image x:Name="EmpPic" 
    Source="{Binding Photo, Converter={StaticResource PhotoConverter} }" 
    HorizontalAlignment="Center" Width="165" Height="160" Margin="2,2,2,2"/> 
+0

J'ai essayé votre code mais quand je construis je reçois cette erreur: erreur Jeton inattendu Aucune dans Rule: MarkupExtension :: = '{' TYPENAME (Arguments)? @ '}', dans '{Binding Photo, Converter = {StaticResource PhotoConverter}'. Ai-je besoin d'ajouter des paramètres au code XAML pour l'image? –

+0

Il manquait un} dans l'attribut Source. – AnthonyWJones

Questions connexes