2014-04-08 3 views
5

В настоящее время я работаю над приложением C# WPF, где я пытаюсь добавить изображение, за которым следует некоторый текст в каждом элементе списка.Добавление изображения в элемент ListBox

У меня есть привязка для текста, но изображение не отображается.

Ниже моя 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; 
     } 
    } 

Ниже, как я добавляю элементы в ListBox

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 Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'ComboBoxItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment') System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=VerticalContentAlignment; DataItem=null; target element is 'ComboBoxItem' (Name=''); target property is 'VerticalContentAlignment' (type 'VerticalAlignment')

Спасибо за любую помощь вы можете предоставить

UPDATE

I «Он получил работу благодаря ответу Клеменса, все еще используя те же две переменные, что и путь, а не путь к изображению, но в любом случае он отображает изображение и текст сейчас.

Проблема заключается в том, что он отображает текст, а снимок снизу, мне нужно показать изображение и текст бок о бок, как я могу это сделать?

+0

Исключением является элемент HorizontalContentAlignment в элементе со списком, который вряд ли связан с этой проблемой. Ваш код выглядит хорошо, я посмотрю еще и надеюсь, что вы получите ответ! – BradleyDotNET

+0

Можете ли вы разместить 'XAML', где определен' ComboBoxItem' –

+0

Я снова посмотрел. это сообщение о поле со списком, для предыдущего диалога, а не с вопросом – Boardy

ответ

7

Снизить модель представления к этому:

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 из строки пути к файлу.

+0

Спасибо, что это сработало, есть вторая проблема, я обновил свой вопрос – Boardy

+0

Установите 'Orientation =" Horizontal "' на StackPanel. – Clemens

+0

Спасибо, просто. Спасибо за вашу помощь. – Boardy

Смежные вопросы