【问题标题】:Binding BitmapImage to Image Control将 BitmapImage 绑定到图像控件
【发布时间】:2014-12-29 19:44:48
【问题描述】:

我正在 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 的 Image Control 绑定 Card 的 Image? 谢谢!!

【问题讨论】:

    标签: c# wpf binding bitmapimage


    【解决方案1】:

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

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

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

    【讨论】:

    • 您好!感谢您的回答,但它不起作用。 crearImagen() 工作,但绑定不起作用,程序不显示图像。
    • @Miguel: crearImagen 是在构造函数中调用的吗?如果稍后调用 crearImagen,则需要实现依赖属性或 INotifyPropertyChanged 接口并在 Imagen 属性中引发 property changed 事件。
    • 现在可以了!!问题是当我从 .xml 文件中读取时,程序使用了其他没有字节 []、没有 strImagen 和没有 Imagen 的构造函数。谢谢你的帮助!!
    猜你喜欢
    • 2013-05-28
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    • 2013-12-07
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多