WPF ListView列图片加字符串显示,点击行数据更换列图片

本文介绍了如何在WPF的ListView中结合图片和文字展示数据,并实现选中行时通过按钮点击切换列图片的功能。示例包括.xaml页面和后台代码,最终展示了一个动态更新ListView行图片的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.xaml页面代码 

<Grid Loaded="Grid_Loaded">
        <ListView Height="315" HorizontalAlignment="Left" Margin="168,223,0,0" Name="listView_Demo" VerticalAlignment="Top" Width="738">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="序号" Width="150" DisplayMemberBinding="{Binding Num}"/>
                    <GridViewColumn Header="姓名" Width="200" DisplayMemberBinding="{Binding Name}"/>
                    <GridViewColumn Header="成绩" Width="150" >
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <Grid Width="150">
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="*" />
                                        <ColumnDefinition Width="2*" />
                                    </Grid.ColumnDefinitions>
                                    <Image Height="18" Width="18" Name="imageName"  Source="pack://application:,,,/res/list_icon/DC_online.ico"/>
                                    <TextBlock Width="Auto" TextAlignment ="Center" Text="{Binding State}" Grid.ColumnSpan="2" />
                                </Grid>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
        <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="935,275,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
    </Grid>

xaml后台代码

 public partial class VideoPage : Page
    {
        public VideoPage()
        {
            InitializeComponent();
        }
        class StudentInfo
        {
            public int Num { set; get; }
            public string Name { set; get; }
            public string State { set; get; }

            public StudentInfo(int num, string name, string state)
            {
                this.Num = num;
                this.Name = name;
                this.State = state;
            }
        }

        private void Grid_Loaded(object sender, RoutedEventArgs e)
        {
            listView_Demo.Items.Add(new StudentInfo(11, "小花", "在线"));
            listView_Demo.Items.Add(new StudentInfo(12, "小草", "在线"));
            listView_Demo.Items.Add(new StudentInfo(13, "小蚂蚁", "离线"));

            
        }
        private void button1_Click(object sender, RoutedEventArgs e)
        {

            ListViewItem myListBoxItem = (ListViewItem)listView_Demo.ItemContainerGenerator.ContainerFromItem(listView_Demo.SelectedItem);

            ContentPresenter contentpresenter = FindVisualChild<ContentPresenter>(myListBoxItem);

            DataTemplate MyDataTemplate = contentpresenter.ContentTemplate;

            Image myTextBlock = MyDataTemplate.FindName("imageName", contentpresenter) as Image;

            myTextBlock.Dispatcher.Invoke(new Action(() => { myTextBlock.Source = new BitmapImage(new Uri("pack://application:,,,/res/list_icon/DC_offline.ico")); }));
            if (myTextBlock != null)
            {

                MessageBox.Show(myTextBlock.Name);

            }
        }
        private childItem FindVisualChild<childItem>(DependencyObject obj) where childItem : DependencyObject
        {
            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
            {
                DependencyObject child = VisualTreeHelper.GetChild(obj, i);
                if (child != null && child is childItem)
                {
                    return (childItem)child;
                }
                else
                {
                    childItem childOfChild = FindVisualChild<childItem>(child);
                    if (childOfChild != null)
                    {
                        return childOfChild;
                    }
                }
            }
            return null;
        }

效果图如下:选中listview行,点击按钮切换图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值