2014-12-29 5 views
0

나는 사용자가 카드를 만들고이 프로그램을 움직이는 사용자가 화면에이 카드를 보여주는 프로젝트를 WPF에서하고 있습니다.비트 맵 이미지를 이미지 컨트롤에 바인딩하기

이 카드는 이름, 설명이 있으며 이미지를 가질 수 있는지 여부를 나타냅니다. 이 템플릿은 다음과 같습니다

<Style x:Key="YellowCard" BasedOn="{StaticResource BaseItemStyle}" TargetType="{x:Type local:tarjeta}"> 
      <Setter Property="Width" Value="100" /> 
      <Setter Property="Height" Value="100" /> 
      <Setter Property="Background" Value="{x:Null}" /> 
      <Setter Property="ContentTemplate"> 
       <Setter.Value> 
        <DataTemplate> 
         <Border BorderThickness="1" BorderBrush="White" Margin="1"> 
          <StackPanel Background="Yellow"> 
           <Image Name="image" Stretch="Fill" ... /> 
           <Label 
           Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:tarjeta}}, Path=Nombre}" 
           HorizontalAlignment="Center" 
           VerticalAlignment="Top" 
           Foreground="Black" 
           FontSize="10"/> 
           <Label 
           Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:tarjeta}}, Path=Descripcion}" 
           HorizontalAlignment="Center" 
           VerticalAlignment="Center" 
           Foreground="Black" 
           FontSize="8"/> 
          </StackPanel> 
         </Border> 
        </DataTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

카드 클래스는 다음과 같습니다

class tarjeta : ContentControl, ICloneable 
{ 
    private string nombre; 
    private string descripcion; 
    public ArrayList historial; 
    private string estilo; 
    byte[] arrayImagen; 
    string nombreImagen; 
    string strImagen; 
    BitmapImage imagen; 
    ImageSource imagenSource; 

    public tarjeta() 
    { 
     nombre = ""; 
     descripcion = ""; 
     historial = new ArrayList(); 
    } 

    public tarjeta(string name, string desc) 
    { 
     nombre = name; 
     descripcion = desc; 
     historial = new ArrayList(); 
     estilo = "YellowCard"; 
    } 

    public tarjeta(string name, string desc, ArrayList hist) 
    { 
     nombre = name; 
     descripcion = desc; 
     historial = hist; 
     estilo = "YellowCard"; 
    } 

    public tarjeta(string name, string desc, ArrayList hist, string style) 
    { 
     nombre = name; 
     descripcion = desc; 
     historial = hist; 
     estilo = style; 
    } 

    public tarjeta(string name, string desc, string nameImagen, string strImage, byte[] array) 
    { 
     nombre = name; 
     descripcion = desc; 
     historial = new ArrayList(); 
     nombreImagen = nameImagen; 
     strImagen = strImage; 
     arrayImagen = array; 
     imagen = new BitmapImage(); 
    } 

    public string Nombre 
    { 
     get { return this.nombre; } 
     set { this.nombre = value; } 
    } 

    public string Descripcion 
    { 
     get { return this.descripcion; } 
     set { this.descripcion = value; } 
    } 

    public string Estilo 
    { 
     get { return this.estilo; } 
     set { this.estilo = value; } 
    } 

    public byte[] ArrayImagen 
    { 
     get { return this.arrayImagen; } 
     set { this.arrayImagen = value; } 
    } 

    public string NombreImagen 
    { 
     get { return this.nombreImagen; } 
     set { this.nombreImagen = value; } 
    } 

    public string StrImagen 
    { 
     get { return this.strImagen; } 
     set { this.strImagen = value; } 
    } 

    public BitmapImage Imagen 
    { 
     get { return this.imagen; } 
     set { this.imagen = value; } 

    } 

    public ImageSource ImagenSource 
    { 
     get { return this.Imagen as ImageSource; } 
    } 

    public object Clone() 
    { 
     return this.MemberwiseClone(); 
    } 


    public BitmapImage crearImagen(byte[] imageData) 
    { 
     // crear un bitmap para la imagen    
     BitmapImage bitImg = new BitmapImage(); 
     try 
     { 
      // asignar los bytes obtenidos de la BBDD al bitmap     
      // se cogera el primer registro el campo 2 que contiene los bytes de la imagen 
      bitImg.BeginInit(); 
      System.IO.Stream ms = new System.IO.MemoryStream(imageData); 
      bitImg.StreamSource = ms; 
      bitImg.EndInit(); 
      bitImg.Freeze(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error: No se puede obtener la imagen " + ex.Message); 
     } 

     return bitImg; 
    } 
} 

카드의 정보 (이름, 설명 및 이미지) 나는 .xml 파일에서 구할.

질문 : 스타일 카드의 이미지 컨트롤을 사용하여 카드의 이미지를 어떻게 처리합니까 ?? 감사합니다! 당신이 나머지와 함께했던 것처럼

답변

0

:

<Image Name="image" Stretch="Fill" 
Source="{Binding RelativeSource={RelativeSource FindAncestor, 
     AncestorType={x:Type local:tarjeta}}, Path=Imagen}" 

당신은 내가 생각 생성자 crearImangen()를 호출해야합니다.

+0

안녕하세요! 귀하의 답변 주셔서 감사하지만 작동하지 않습니다. crearImagen()은 작동하지만 바인딩이 작동하지 않고 프로그램이 이미지를 표시하지 않습니다. – Miguel

+0

@Miguel : 생성자라는 'crearImagen'입니까? 나중에 crearImagen을 호출한다면, 의존성 프로퍼티 또는'INotifyPropertyChanged' 인터페이스를 구현하고'Imagen' 속성에서'property changed' 이벤트를 발생시킬 필요가 있습니다. –

+0

이제 작업이 완료되었습니다! 문제는 .xml 파일에서 strImagen없이 imagen없이 byte []없이 다른 생성자를 사용하는 프로그램에서 읽은 것입니다. 도와 주셔서 감사합니다 !! – Miguel

관련 문제