使用位图图像创建自定义通用列表

发布于 2024-07-15 20:34:40 字数 1564 浏览 12 评论 0原文

在我的 WPF 项目中,有一个列表框,我必须在其中显示图像以及每个图像旁边的文本(例如:照片拍摄日期、位置等)。 我已经尝试创建一个通用列表,但我仍然无法将其分配给列表框之

类的东西,

特别是我一直在这方面尝试一些东西。

public class LoadImages
{
    public static List<ImageLoader> LoadImages()
    {
        List<ImageLoader> img = new List<ImageLoader>();

        Uri uri = new Uri(@"http://somedomain.com/pic.jpg", UriKind.Absolute);
        BitmapImage bi = new BitmapImage(uri);

        img.Add(new ImageLoader("1_1",bi));

        return img;            
    }
}

public class ImageLoader
{
    string mediaid;
    BitmapImage thumbnail;

    public ImageLoader(string mediaid, BitmapImage b)
    {
        this.mediaid = mediaid;
        this.thumbnail = b;
    }
}

我的 XAML 看起来像这样。

        <ListBox Name="ListBox1" SelectionMode="Extended" ItemsSource="{Binding}"
             Width="300" Height="300" IsSynchronizedWithCurrentItem="True">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Image Source="{Binding thumbnail}"/>
                    <TextBlock Text="{Binding mediaid}"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

目前我已经设置了 Window.DataContext

<Window.DataContext>
    <ObjectDataProvider ObjectType="{x:Type local:LoadImages}" MethodName="LoadImages"/>
</Window.DataContext>

但每次我运行该应用程序时,列表框都显示为空。

有什么建议。

In my WPF project there is a listbox in which I have to display images and next to each image their text (for example : date the photo was taken, location etc).
I have tried creating a generic List but I still can't assign it to the listbox

Something like

Bscially I have been trying something on this lines.

public class LoadImages
{
    public static List<ImageLoader> LoadImages()
    {
        List<ImageLoader> img = new List<ImageLoader>();

        Uri uri = new Uri(@"http://somedomain.com/pic.jpg", UriKind.Absolute);
        BitmapImage bi = new BitmapImage(uri);

        img.Add(new ImageLoader("1_1",bi));

        return img;            
    }
}

public class ImageLoader
{
    string mediaid;
    BitmapImage thumbnail;

    public ImageLoader(string mediaid, BitmapImage b)
    {
        this.mediaid = mediaid;
        this.thumbnail = b;
    }
}

And my XAML looks like this.

        <ListBox Name="ListBox1" SelectionMode="Extended" ItemsSource="{Binding}"
             Width="300" Height="300" IsSynchronizedWithCurrentItem="True">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Image Source="{Binding thumbnail}"/>
                    <TextBlock Text="{Binding mediaid}"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

For the time being I have set the Window.DataContext

<Window.DataContext>
    <ObjectDataProvider ObjectType="{x:Type local:LoadImages}" MethodName="LoadImages"/>
</Window.DataContext>

But everytime I run the app the listbox shows up empty.

Any suggestions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

温柔一刀 2024-07-22 20:34:41

经过大量阅读和谷歌搜索后,我找到了答案,我在 ImageLoader 类中所要做的就是为 mediaid 和缩略图创建属性,然后绑定到列表框现在就像字符一样工作。 所以上面问题中提出的 ImageLoader 类现在看起来像

public class ImageLoader
{
    string mediaid;
    BitmapImage thumbnail;

    public string MediaId
    {
        get { return mediaid; }
        set { mediaid = value; }
    }

    public BitmapImage Thumbnail
    { 
        get { return thumbnail; } 
        set { thumbnail = value; } 
    }

    public ImageLoader(string mediaid, BitmapImage b)
    {
        this.mediaid = mediaid;
        this.thumbnail = b;
    }
}

After a lot of reading and googling I found my answer, all I had to do in the ImageLoader class is to create properties for mediaid and thumbnail and after that binding to the listbox now works like a char. So the ImageLoader class in asked in the question above now looks like

public class ImageLoader
{
    string mediaid;
    BitmapImage thumbnail;

    public string MediaId
    {
        get { return mediaid; }
        set { mediaid = value; }
    }

    public BitmapImage Thumbnail
    { 
        get { return thumbnail; } 
        set { thumbnail = value; } 
    }

    public ImageLoader(string mediaid, BitmapImage b)
    {
        this.mediaid = mediaid;
        this.thumbnail = b;
    }
}
木有鱼丸 2024-07-22 20:34:40

图像元素确实支持 Source 属性的 Uris。 为什么不让您的 LoadImages 类返回一组 Uris 而不是图像? 图像元素还可以为您执行异步工作;)

Image element do support Uris for Source property. Why not making your LoadImages class return a set of Uris instead of images? Also image element can do async job for you ;)

无所谓啦 2024-07-22 20:34:40

缩略图和 mediaid 不是公开的,因此绑定失败。

thumbnail and mediaid aren't public, and thus the binding fails.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文