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 파일에서 구할.
질문 : 스타일 카드의 이미지 컨트롤을 사용하여 카드의 이미지를 어떻게 처리합니까 ?? 감사합니다! 당신이 나머지와 함께했던 것처럼
안녕하세요! 귀하의 답변 주셔서 감사하지만 작동하지 않습니다. crearImagen()은 작동하지만 바인딩이 작동하지 않고 프로그램이 이미지를 표시하지 않습니다. – Miguel
@Miguel : 생성자라는 'crearImagen'입니까? 나중에 crearImagen을 호출한다면, 의존성 프로퍼티 또는'INotifyPropertyChanged' 인터페이스를 구현하고'Imagen' 속성에서'property changed' 이벤트를 발생시킬 필요가 있습니다. –
이제 작업이 완료되었습니다! 문제는 .xml 파일에서 strImagen없이 imagen없이 byte []없이 다른 생성자를 사용하는 프로그램에서 읽은 것입니다. 도와 주셔서 감사합니다 !! – Miguel