我正在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文件中获取它。
问题是: 我如何使用Style的图像控制来绑定Card的图像? 谢谢!!
答案 0 :(得分:0)
就像你完成剩下的工作一样:
<Image Name="image" Stretch="Fill"
Source="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type local:tarjeta}}, Path=Imagen}"
我应该在构造函数中调用crearImangen()
。