gpt4 book ai didi

c# - 独立存储中的绑定(bind)图像

转载 作者:太空狗 更新时间:2023-10-29 21:36:36 25 4
gpt4 key购买 nike

嘿。 我有一个用户可以搜索的项目列表。搜索结果显示在列表框中。每个 animal 对象都有一个指向独立存储中图像的路径。将 listboxitem 中的图像控件绑定(bind)到独立存储中的图像的最快方法是什么?我见过的示例倾向于显示来自 Internet 的图像而不是独立存储。如果我有大约 10 张图像,它似乎会占用所有内存并崩溃。谢谢

编辑:

我在我的 BitmapConverter 类中使用它(继承 IValueConverter)

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value !=null)
{
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.SetSource(new MemoryStream((Byte[]) value));
return bitmapImage;
}
else
{
return null;
}
}

我在 AppResource.xaml 文件的顶部有这个:

    <ImageApp_Converter:BitmapConverter x:Key="bmpConverter" />    

In my style, within the AppResource.xaml file:

<Image HorizontalAlignment="Left" Margin="8,8,0,4" Width="160" Height="120" Source="{Binding Converter={StaticResource bmpConverter}}" />

我在 BitmapConverter 中设置了一个断点,但它从未被调用过。我以前从未使用过 IValueConverter,所以任何帮助都会很棒。谢谢

最佳答案

显示的代码中存在一些问题。您的示例中可能缺少一些:

首先,您对转换器的绑定(bind)没有指定什么 来绑定(bind)到它的值,所以它永远不会被调用。至少它需要一个 Path= (或者只是一个属性名称作为快捷方式),否则转换器将不会被调用。您在哪里设置列表的 ItemSource?

其次,传递的值是字符串文件名。您的转换器需要将它们用作文件名并根据该名称打开流。目前它正在尝试将名称用作字节数组。

最后,如果图像是固定的集合,将它们存储在 ClientBin 下的图像文件夹中并使用以下路径语法“/images/imagename.jpg”等简单地引用它们会更有意义。这将涉及浏览器的自动缓存。您不需要转换器。 (关键是前导“/”。如果没有它,Silverlight 会假定图像位于当前模块中)

alt text

下面是一个完整的示例,使用 ClientBin/images 文件夹中显示的图像,运行时看起来像这样:

alt text

示例 Xaml 文件:

<UserControl x:Class="SilverlightApplication1.IsoImages"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:ImageApp_Converter="clr-namespace:SilverlightApplication1" mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">
<Grid x:Name="LayoutRoot" Background="White">
<ListBox x:Name="ImageList">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="AliceBlue">
<Image HorizontalAlignment="Left" Margin="8,8,0,4" Width="160" Height="120" Source="{Binding Path=Filename}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</UserControl>

后面的示例代码是:

using System.Collections.Generic;
using System.Windows.Controls;

namespace SilverlightApplication1
{
public partial class IsoImages : UserControl
{
public IsoImages()
{
InitializeComponent();
List<ImageItem> images = new List<ImageItem>()
{
new ImageItem("/images/Image1.jpg"),
new ImageItem("/images/Image2.jpg"),
new ImageItem("/images/Image3.jpg"),
new ImageItem("/images/Image4.jpg")
};
this.ImageList.ItemsSource = images;
}
}

public class ImageItem
{
public string Filename{ get; set; }
public ImageItem( string filename )
{
Filename = filename;
}
}
}

关于c# - 独立存储中的绑定(bind)图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4114153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com