显示按钮中类属性的图像

时间:2014-08-01 23:14:47

标签: c# wpf

我需要显示一个来自按钮内的类属性的图像,绑定不起作用。

这就是我的进展方式:

我有一个类Product,包含system.drawable.image类型的ProductImage和其他一些字符串。

XAML代码:

<Button Content="{Binding ProductImage}" Name="ImageButton"></Button>

按钮显示内容:System.Drawing.Bitmap。

任何帮助请。

编辑:我发现添加Window2.XAML.cs文件很重要

MySqlConnection connection = new MySqlConnection(ConnectionManager.ConnectionString);
        try
        {
            connection.Open();
            MySqlCommand command = new MySqlCommand("SELECT * FROM products", connection);
            MySqlDataReader reader = command.ExecuteReader();
            var list = new List<ProductsBLL>();
            while (reader.Read())
            {
                ProductsBLL product = new ProductsBLL();

                product.ProductId = (int) reader[0];
                product.ProductName = (string) reader[1];
                product.ProductReference = (string) reader[2];
                product.ProductColor = (string) reader[3];
                var imagems = (byte[]) reader[4];
                MemoryStream ms = new MemoryStream(imagems);
                product.ProductImage = System.Drawing.Image.FromStream(ms);
                product.ProductDescription = (string) reader[5];
                product.ProductUnitPrice = (decimal) reader[6];
                product.ProductUnitInStock = (int) reader[7];
                product.ProductUnitInCommand = (int) reader[8];

                list.Add(product);
                product = null;
            }

            ProductsListView.ItemsSource = list;
        }
        catch (Exception e)
        {
            MessageBox.Show(this, e.Message);

        }
        finally
        {
            if(connection.State == ConnectionState.Open)
                connection.Close();
        }

2 个答案:

答案 0 :(得分:0)

尝试使用Image控件作为Bitmap的占位符:

<Button Name="ImageButton">
    <Image Source="{Binding ProductImage}" />
</Button>

答案 1 :(得分:0)

ProductImage属性的类型当前为System.Drawing.Image,即WinForms,而不是WPF。无法通过WPF图像控件直接绘制System.Drawing.Image

您应该将属性类型更改为System.Windows.Media.ImageSource

public ImageSource ProductImage { get; set; }

现在,您将创建System.Windows.Media.Imaging.BitmapImage System.Windows.Media.Imaging.BitmapFrame的实例作为属性的值。请注意,必须设置BitmapCacheOption.OnLoad,因为您希望在加载图像后立即处理流。

byte[] imageBuffer = ...

using (var memoryStream = new MemoryStream(imageBuffer))
{
    product.ProductImage = BitmapFrame.Create(
        memoryStream, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}

using (var memoryStream = new MemoryStream(imageBuffer))
{
    var bitmapImage = new BitmapImage();
    bitmapImage.BeginInit();
    bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
    bitmapImage.StreamSource = memoryStream;
    bitmapImage.EndInit();
    product.ProductImage = bitmapImage;
}

最后(正如在另一个答案中已经说过的那样)你必须使用Image控件作为Button的Content

<Button Name="ImageButton">
    <Image Source="{Binding ProductImage}" />
</Button>