如何在WPF中将图像添加到ListView

问题描述

我想将图像添加到ListView。我已经将图像转换为BitmapImage。我有包含绑定到DataTemplate的Image属性的对象的集合。

<UserControl.Resources>
        <DataTemplate x:Key="ImageCell">
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding DocumentPicture,UpdateSourceTrigger=PropertyChanged}" 
                    Stretch="Fill"  IsEnabled="True" Visibility="Visible"/>
            </StackPanel>
        </DataTemplate>
</UserControl.Resources>

 <ListView Name="lstView" Grid.Column="0" Grid.Row="3"  Margin="5" Height="90" Width="Auto"  
            ItemsSource="{Binding ListDocuments,UpdateSourceTrigger=PropertyChanged}" ItemTemplate=" 
            {StaticResource ImageCell}" BorderThickness="1" Style="{x:Null}" SelectedItem="{Binding 
             SelectedLstimage}" >
            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" Style="{x:Null}"/>
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>
</ListView>

它给了我这个输出:(不用担心我设置为识别列表中图像的红色背景。)

enter image description here

解决方法

从您的绑定中删除,UpdateSourceTrigger = PropertyChanged的两个实例。他们什么也没做。

取下图像周围的堆栈面板。那什么也没做。

使列表视图成为列表框。给图像加一个宽度。

检查您要绑定的事物的名称。

确保将DocumentPicture设置为某种东西,并且它实际上是一个公共的bitmapimage属性

<UserControl.Resources>
    <DataTemplate x:Key="ImageCell">
            <Image Source="{Binding DocumentPicture}" 
                Width="80"
                Stretch="Fill"  IsEnabled="True" Visibility="Visible"/>
    </DataTemplate>
</UserControl.Resources>

<ListBox Name="lstView" Grid.Column="0" Grid.Row="3"  Margin="5" Height="90" Width="Auto"  
        ItemsSource="{Binding ListDocuments}" ItemTemplate=" 
        {StaticResource ImageCell}" BorderThickness="1" Style="{x:Null}" SelectedItem="{Binding SelectedLstImage}" >
        <ListBox.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Horizontal" Style="{x:Null}"/>
            </ItemsPanelTemplate>
        </ListBox.ItemsPanel>
</ListBox>

看看距离工作有多远。

,

您可以通过迭代方式以编程方式进行操作,以抛出图像列表并实例化新图像,然后使用
lstView.Items.Add()

添加它

我举了一个非常简单的例子:

<Grid>
    <ListView x:Name="View"></ListView>
    <Button Click="Button_Click" Height="20" Width="20">Button</Button>
</Grid>
private void Button_Click(object sender,RoutedEventArgs e)
        {
            for (int i = 0; i < 20; i++)
            {
                Label lbl = new Label();
                lbl.Content = "Label " + i;
                View.Items.Add(lbl);
            }

        }