2009-10-13 2 views
1

다음은 SQL Server 데이터베이스에서 가져온 문자열을 그림으로 변환하는 클래스입니다. XAML Image 컨트롤에서 변환 함수를 호출하여 하위 양식을 열 때 기본 양식 DataGrid에서 선택된 행을 기반으로 개별 직원의 이미지를 볼 수 있도록하려면 어떻게해야합니까? 기본적으로, 내 질문은 - 런타임에 사진 텍스트를 이미지로 변환하는 변환기 기능을 호출 할 수 있습니까? 나는 이와 같은 것을 시도했다 ... 전에 이것을하기 위해 코드를 사용했지만 XAML에서 직접하고 싶다.Silverlight 3의 XAML에서 ConvertBase64ToImage 변환기

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"/> 

코드 : -

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; 
     } 



    } 

} 

답변

0
의 긴밀한

하지만 조금 더 많은 작업이 필요합니다. 먼저 코드, 당신은 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(); 
    } 
} 

지금 당신이 변환기의 인스턴스를 사용할 수 있도록 할 필요를 XAML에서, 좋은 장소가 된 UserControls 자료 사전과 같다 : -

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

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

그런 다음 나중에 이미지에서 : -

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

나는 코드를 시도했지만 내가 빌드 할 때이 오류가 얻을 : 오류 을 규칙에서 예기치 않은 토큰 없음 : MarkupExtension :: = '{'TYPENAME (Arguments)? @ '}', '{Binding Photo, Converter = {StaticResource PhotoConverter}'에 있습니다. 이미지의 XAML에 매개 변수를 추가해야합니까? –

+0

원본 특성에서 누락 된}이 (가) 있습니다. – AnthonyWJones

관련 문제