在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代码?

谢谢,肯尼

在UWP c#上绑定从字节流获得的BitmapImage到ImageBrush

使用

ImageSource="{Binding Image}"
不是

ImageSource="{x:Bind Image}"

x:Bind需要精确的类型匹配,而Binding利用了从几个源类型(例如string, Uri, byte[])到ImageSource的内置转换。

更改ImageSource

ImageSource="{Binding Image}"

感谢克莱门斯!