在UWP c#上绑定从字节流获得的BitmapImage到ImageBrush
本文关键字:BitmapImage ImageBrush 字节流 UWP 绑定 | 更新日期: 2023-09-27 18:17:58
所以我是为通用Windows平台开发的。我从一个网站上拉出一个图像作为base64字符串,并使用byte[] imageBytes = Convert.FromBase64String(srcString);
将其转换为字节数组,将其转换为BitmapImage,代码如下:
public async static Task<BitmapImage> ImageFromBytes(Byte[] bytes)
{
BitmapImage image = new BitmapImage();
using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream())
{
await stream.WriteAsync(bytes.AsBuffer());
stream.Seek(0);
await image.SetSourceAsync(stream);
}
return image;
}
它看起来像这拉在我的图像正确为BitmapImage对象中的图像的尺寸属性被正确填充。问题是,我需要使用这个图像对象作为GridView项目模板的背景,使用以下XAML代码的图像刷:
<GridView.ItemTemplate>
<DataTemplate x:DataType="models:data" >
<StackPanel
Orientation="Horizontal"
HorizontalAlignment="Center"
Width="190"
Height="270"
BorderThickness="1" BorderBrush="DarkBlue"
>
<StackPanel.Background>
<ImageBrush Stretch="Fill" ImageSource="{x:Bind Image}"/>
</StackPanel.Background>
<StackPanel HorizontalAlignment="Center" Padding="5" >
<StackPanel Orientation="Horizontal" >
<TextBlock Text="Title:" FontWeight="Bold" />
<TextBlock Name="Block" Margin="5,0,0,0"
Text="{x:Bind Title}" />
</StackPanel>
</StackPanel>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
我已经正确设置了反向代码,因为如果我将本地URI输入到Image绑定变量中,那么一切都可以完美地工作。但是,由于我创建的BitmapImage中的URI属性为空,因此我无法获取它的URI并将其用于绑定。获取图像作为一个字节数组是唯一的方法,我能够做到这一点。是否有一种方法来使用这个图像我拉在字节流,并将其绑定到我的XAML代码?
谢谢,肯尼
使用
ImageSource="{Binding Image}"
不是ImageSource="{x:Bind Image}"
x:Bind
需要精确的类型匹配,而Binding
利用了从几个源类型(例如string
, Uri
, byte[]
)到ImageSource
的内置转换。
更改ImageSource
ImageSource="{Binding Image}"
感谢克莱门斯!