我需要显示一个来自按钮内的类属性的图像,绑定不起作用。
这就是我的进展方式:
我有一个类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();
}
答案 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>