将BitmapImage绑定到图像控件

时间:2014-12-29 09:18:00

标签: c# wpf binding bitmapimage

我正在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的图像? 谢谢!!

1 个答案:

答案 0 :(得分:0)

就像你完成剩下的工作一样:

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

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