2014-04-08 19 views
5

Attualmente sto lavorando a un'applicazione C# WPF in cui sto cercando di aggiungere un'immagine, seguita da un testo in ciascuna voce dell'elenco.Aggiunta di immagini all'elemento ListBox

Ho il binding che funziona per il testo ma l'immagine non viene visualizzata.

Qui di seguito è il mio 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> 

Qui di seguito è la mia classe DirectoryInserzione

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

seguito è riportato come sto aggiungendo elementi alla casella di riepilogo

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")); 

è sempre aggiunto il testo bene ma non l'immagine.

non sono sicuro se è legato, ma ottengo il seguente nella Console di output in 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')

Grazie per tutto l'aiuto che possono fornire

UPDATE

I L'ho fatto funzionare grazie alla risposta di Clemens, usando ancora le stesse due variabili in quanto il percorso non è il percorso dell'immagine, ma in ogni caso sta visualizzando l'immagine e il testo ora.

Il problema è che visualizza il testo e l'immagine è sotto, ho bisogno di mostrare l'immagine e il testo fianco a fianco, come posso fare questo?

+0

L'eccezione è per HorizontalContentAlignment su un elemento casella combinata, probabilmente non correlato a questo problema. Il tuo codice sembra buono, guarderò ancora un po 'e spero che tu abbia una risposta! – BradleyDotNET

+0

Puoi postare 'XAML' dove è definito' ComboBoxItem' –

+0

Ho guardato di nuovo. il messaggio relativo alla casella combinata è per un dialogo precedente, non quello con il problema – Boardy

risposta

7

ridurre il vostro modello di vista a questo:

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

e cambiare il tuo DataTemplate a questo:

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

incorporato conversione di tipo creerà automaticamente un ImageSource dalla stringa di percorso del file.

+0

Grazie a questo ha funzionato, c'è un secondo problema, ho aggiornato la mia domanda – Boardy

+0

Set 'Orientation =" Horizontal "' sul StackPanel. – Clemens

+0

Grazie così semplice. Grazie per il tuo aiuto molto apprezzato – Boardy

Problemi correlati