将图像添加到ListBox项目

时间:2014-04-08 19:38:09

标签: c# wpf xaml listbox

我目前正在开发一个C#WPF应用程序,我正在尝试添加一个图像,然后在每个列表项中添加一些文本。

我已经对文字进行了绑定,但图像没有显示。

以下是我的XAML:

<Window x:Class="ServerAdministrator.FtpDirectoryListing"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:ServerAdministrator"
        Title="FTP Directory Listing" Height="391" Width="599">
    <Grid>
        <StatusBar Height="30" Margin="0,322,0,0" Name="statusBar1" VerticalAlignment="Top" />
        <ToolBar Height="26" Name="toolBar1" VerticalAlignment="Top" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,32,0,0" Name="textBox1" VerticalAlignment="Top" Width="517" />
        <ListBox x:Name="lstDirecotryListing" Height="233" HorizontalAlignment="Left" Margin="12,61,0,0" VerticalAlignment="Top" Width="553">
            <ListBox.ItemTemplate>
                <DataTemplate DataType="{x:Type local:DirectoryListing}">
                    <StackPanel>
                        <TextBlock Margin="3" Text="{Binding path}" />
                        <ContentControl Margin="3" Content="{Binding image}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Window>

以下是我的DirectoryListing类

class DirectoryListing
    {
        public string path {get; set;}
        public Image image{get; set;}
        public DirectoryListing(Image imgage, String path)
        {
            this.image = image;
            this.path = path;
        }
    }

以下是我如何将项目添加到列表框

Image image = new Image();
            BitmapImage bi = new BitmapImage(new Uri(@"C:\Users\Chris\Documents\Visual Studio 2010\Projects\ServerAdministrator\ServerAdministrator\bin\Debug\images\directory.png"));
            image.Source = bi;
            lstDirecotryListing.Items.Add(new DirectoryListing(image, "hello"));

文字添加得很好但不是图像。

我不确定它是否相关,但我在VS2010的控制台输出中得到以下内容

  

System.Windows.Data错误:4:找不到绑定源   参考&#39; RelativeSource FindAncestor,   AncestorType =&#39; System.Windows.Controls.ItemsControl&#39 ;,   AncestorLevel =&#39; 1&#39;&#39 ;. BindingExpression:路径= Horizo​​ntalContentAlignment;   的DataItem = NULL;目标元素是&#39; ComboBoxItem&#39; (名称=&#39;&#39);目标   属性是&#39; Horizo​​ntalContentAlignment&#39; (键入&#39; Horizo​​ntalAlignment&#39;)   System.Windows.Data错误:4:无法找到绑定源   参考&#39; RelativeSource FindAncestor,   AncestorType =&#39; System.Windows.Controls.ItemsControl&#39 ;,   AncestorLevel =&#39; 1&#39;&#39 ;. BindingExpression:路径= VerticalContentAlignment;   的DataItem = NULL;目标元素是&#39; ComboBoxItem&#39; (名称=&#39;&#39);目标   属性是&lt; VerticalContentAlignment&#39; (键入&#39; VerticalAlignment&#39;)

感谢您提供的任何帮助

更新

由于克莱门斯的回答,我已经使用了它,仍然使用相同的两个变量,因为路径不是图像的路径,但无论如何,它现在正在显示图像和文本。

问题是它显示文字和图片在下面,我需要并排显示图片和文字,我该怎么办?

1 个答案:

答案 0 :(得分:12)

将视图模型缩小到:

public class DirectoryListing
{
    public string Name { get; set; }
    public string Path { get; set; }
}

并将您的DataTemplate更改为:

<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <TextBlock Margin="3" Text="{Binding Name}"/>
            <Image Margin="3" Source="{Binding Path}"/>
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>

内置类型转换将自动从文件路径字符串创建ImageSource。