将位图图像绑定到图像控件

本文关键字:图像 控件 绑定 位图 | 更新日期: 2023-09-27 18:35:28

我正在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文件中获取它。

问题是:如何使用样式的图像控件进行绑定卡的图像?谢谢!!

将位图图像绑定到图像控件

就像

你对其余部分所做的那样:

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

我认为您应该在构造函数中调用crearImangen()