C# 将图像添加到列表框项目
我目前正在开发一个C#WPF应用程序,我试图在其中添加一个图像,然后在每个列表项中添加一些文本 我已经为文本进行了绑定,但是没有显示图像 下面是我的XAML:C# 将图像添加到列表框项目,c#,wpf,xaml,listbox,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.mic
<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>
下面是我如何将项目添加到列表框
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:找不到与绑定的源
参考“相对资源查找器”,
AncestorType='System.Windows.Controls.ItemsControl',
AncestorLevel='1'。BindingExpression:Path=HorizontalContentAlignment;
DataItem=null;目标元素是“ComboBoxItem”(名称=“”);目标
属性为“HorizontalContentAlignment”(类型为“HorizontalAlignment”)
System.Windows.Data错误:4:找不到与绑定的源
参考“相对资源查找器”,
AncestorType='System.Windows.Controls.ItemsControl',
AncestorLevel='1'。BindingExpression:Path=VerticalContentAlignment;
DataItem=null;目标元素是“ComboBoxItem”(名称=“”);目标
属性为“VerticalContentAlignment”(类型为“VerticalAlignment”)
谢谢你能提供的帮助
更新
多亏了Clemens的回答,我才让它工作了,仍然使用了相同的两个变量,因为路径不是图像的路径,但无论如何,它现在正在显示图像和文本
问题是它显示文本,而图片在下面,我需要将图片和文本并排显示,如何才能做到这一点?将视图模型简化为:
public class DirectoryListing
{
public string Name { get; set; }
public string Path { get; set; }
}
并将数据模板更改为:
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="3" Text="{Binding Name}"/>
<Image Margin="3" Source="{Binding Path}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
内置类型转换将自动从文件路径字符串创建ImageSource。组合框项上的HorizontalContentAlignment例外,可能与此问题无关。你的代码看起来不错,我会再看一些,希望你能得到答案!你能把
XAML
贴到定义了ComboBoxItem
的地方吗?我又看了一遍。关于组合框的消息是针对上一个对话框的,而不是带有问题的对话框您不应该在视图模型中具有绑定到图像控件的内容属性的ContentControl。相反,DataTemplate中应该有一个图像控件,它的Source
属性绑定到视图模型中的(文件名)字符串或BitmapImage属性。我也尝试过,做了同样的事情,假设我做得正确。感谢这一点,还有第二个问题,我已经在StackPanel上更新了我的问题集Orientation=“Horizontal”
。谢谢你这么简单。谢谢你的帮助,非常感谢
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Margin="3" Text="{Binding Name}"/>
<Image Margin="3" Source="{Binding Path}"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>