C# WPF ListBox 动态显示图片功能

 更新时间:2023年08月19日 09:00:28   作者:Creator丶小鑫  
这篇文章主要介绍了C# WPF ListBox 动态显示图片,处理过程分为前台代码和后台代码,本文结合实例代码给大家介绍的非常详细,需要的朋友可以参考下

前言

        最近在和其他软件联合做一个本地图片选择传输功能,为此希望图片能够有序的呈现在客户端,简单的实现了一下功能,通过Mvvm模式进行呈现,过程简单通俗,话不多说直接上图。

处理过程  

前台代码

你只需要粘贴到你的前台xml中就可以,位置记得调整下Margin,我这是按照我的位置进行调整的,所以针对ListBox在你的前台你还需要调整下。

<ListBox Name="lstFileManager" Background ="Transparent" ItemsSource="{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" Margin="69,192,50,40">
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <WrapPanel/>
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <!--这里修改内容整体大小以及在你框内的占比,我这一行显示5个-->
            <Grid Margin="17" Width="100" Height="155">
                <Grid.RowDefinitions>
                    <RowDefinition Height="Auto" ></RowDefinition>
                    <RowDefinition Height="Auto" ></RowDefinition>
                    <RowDefinition Height="Auto" ></RowDefinition>
                </Grid.RowDefinitions>
                <Image Source="{Binding Pic}" HorizontalAlignment="Center" VerticalAlignment="Center" Width="100" Height="100"/>
                <Border BorderThickness="1" BorderBrush="red" Margin="1,107,1,0"/>
                <TextBlock Text="{Binding Name}" Grid.Row="1" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center" Height="Auto" TextWrapping="Wrap"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

后台代码

创建一个类进行数据绑定

 public class LVData
    {
        public string Name { get; set; }
        public BitmapImage Pic { get; set; }
    }

定义一个集合进行数据缓存 (集合定义在MainWindow的类中)

ObservableCollection<LVData> LVDatas = new ObservableCollection<LVData>();

在我们的逻辑中进行数据填充和呈现,清除集合清空ListBox中的Item显示

//添加图
LVDatas.Add(new LVData { Name = "图片在ListBox中显示的名称(建议直接显示图片名称)", Pic = new BitmapImage(new Uri("完整的图片路径")) });
//显示在ListBox中
lstFileManager.ItemsSource = LVDatas;
//清除集合清空呈现
LVDatas.Clear();
//当前点击的图片名称(lstFileManager.SelectedIndex  这是目前点击的下标)
Console.WriteLine(LVDatas[lstFileManager.SelectedIndex].Name);

整体代码

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace ImageTexture
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        //定义集合
        ObservableCollection<LVData> LVDatas = new ObservableCollection<LVData>();
        public MainWindow()
        {
            InitializeComponent();
            ImageTexture2DView("E:\\ProjectFiles\\ImageTexture");
        }
        private void ImageTexture2DView(string path)
        {
            //Path是图片所在的文件夹路径
            var apps = System.IO.Directory.GetFiles(path);
            List<string> images = new List<string>();
            foreach (string app in apps)//---遍历文件夹所有文件
            {
                var fi = new FileInfo(app);//---使用FileInfo类进行操作
                if (fi.Extension == ".png")
                {
                    //将图片添加到LVData中
                    LVDatas.Add(new LVData { Name = fi.Name.Remove(fi.Name.LastIndexOf(".")), Pic = new BitmapImage(new Uri(fi.FullName)) });
                }
            }
            //进行呈现
            lstFileManager.ItemsSource = LVDatas;
        }
        private void ImageClear_Click(object sender, RoutedEventArgs e)
        {
            //清除集合清空ListBox中的Item显示
            LVDatas.Clear();
        }
    }
    public class LVData
    {
        public string Name { get; set; }
        public BitmapImage Pic { get; set; }
    }
}

结局    

后续想从数据库或者其他地方添加就根据自己的想法添加就可以了,另外获取点击的是哪个绑定个监听事件就可以了,希望对大家有帮助。

到此这篇关于C# WPF ListBox 动态显示图片的文章就介绍到这了,更多相关C# WPF ListBox 显示图片内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • DevExpress设置TreeList图片节点背景色的方法

    DevExpress设置TreeList图片节点背景色的方法

    这篇文章主要介绍了DevExpress设置TreeList图片节点背景色的方法,需要的朋友可以参考下
    2014-08-08
  • C# Marshal类基本概念和入门实例讲解

    C# Marshal类基本概念和入门实例讲解

    这篇文章主要介绍了C# Marshal类基本概念和入门实例,具有很好的参考价值,希望对大家有所帮助。
    2023-02-02
  • C# Assembly.Load案例详解

    C# Assembly.Load案例详解

    这篇文章主要介绍了C# Assembly.Load案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • c#中判断类是否继承于泛型基类

    c#中判断类是否继承于泛型基类

    这篇文章主要介绍了c#中判断类是否继承于泛型基类,最简单的办法肯定是typeof(b).baseType=typeof(a<string>)这样就可以返回true,但是这种方法时不妥的,下面看看如何解决这个问题呢
    2022-04-04
  • 访问修饰符(C# 编程指南)

    访问修饰符(C# 编程指南)

    所有类型和类型成员都具有可访问性级别,用来控制是否可以在您程序集的其他代码中或其他程序集中使用它们。您在声明类型或成员时使用以下访问修饰符之一来指定其可访问性
    2011-02-02
  • C# Lambda表达式select()和where()的区别及用法

    C# Lambda表达式select()和where()的区别及用法

    这篇文章主要介绍了C# Lambda表达式select()和where()的区别及用法,select在linq中一般会用来提取最后筛选的元素集合,在lambda表达式中通常用where得到元素集合,需要的朋友可以参考下
    2023-07-07
  • python实现AutoResetEvent类的阻塞模式方法解析

    python实现AutoResetEvent类的阻塞模式方法解析

    AutoResetEvent :当某个线程执行到WaitOne()方法时,该线程则会处于阻塞模式,当被调用了Set()方法,阻塞的线程则会继续向下执行,其状态立即被自动设置为阻塞模式
    2012-11-11
  • c#继承与多态使用示例

    c#继承与多态使用示例

    继承是面向对象程序设计的主要特征之一,允许重用现有类去创建新类的过程。下面使用示例学习一下c#继承与多态
    2014-01-01
  • C#高效实现Excel与CSV的互相转换

    C#高效实现Excel与CSV的互相转换

    在数据处理和报表工作流程中,将 Excel 文件和 CSV 文件互相转换是非常常见的需求,本文将从基础操作讲起,逐步介绍自定义设置、批量处理及高级实践技巧,帮助你在实际工作中轻松应对各种转换需求
    2026-04-04
  • C# WPF调用QT窗口的方法

    C# WPF调用QT窗口的方法

    本文主要介绍了C# WPF调用QT窗口的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02

最新评论