2014-04-08 16 views
5

Ich arbeite derzeit an einer C# -WPF-Anwendung, wo ich versuche, ein Bild hinzuzufügen, gefolgt von etwas Text in jedem Listenelement.Bild zu ListBox Element hinzufügen

Ich habe die Bindung funktioniert für den Text, aber das Bild wird nicht angezeigt.

Unten ist mein 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> 

Unten ist mein Directory Klasse

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

Unten ist, wie ich Elemente der Listbox bin Hinzufügen

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

Der Text hinzugefügt wird immer gut, aber nicht das Bild.

Ich bin mir nicht sicher, ob es verwandt ist, aber ich folgend in der Konsolenausgabe 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')

Vielen Dank für jede Hilfe erhalten können Sie

UPDATE

bieten mir habe es funktioniert dank Clemens Antwort, immer noch mit den gleichen zwei Variablen wie der Pfad ist nicht der Pfad zum Bild, aber wie auch immer, es zeigt jetzt das Bild und den Text.

Das Problem ist, es zeigt den Text und das Bild ist darunter, ich muss das Bild und den Text nebeneinander anzeigen, wie kann ich das tun?

+0

Die Ausnahme ist für HorizontalContentAlignment auf einem Kombinationsfeld Element, nicht wahrscheinlich mit diesem Problem verbunden. Dein Code sieht gut aus, ich schaue noch mehr und ich hoffe du bekommst eine Antwort! – BradleyDotNET

+0

Kannst du das 'XAML' posten, wo das' ComboBoxItem' definiert ist –

+0

Ich habe nochmal gesucht. Diese Nachricht über das Kombinationsfeld bezieht sich auf einen vorherigen Dialog, nicht auf den mit dem Problem – Boardy

Antwort

7

Reduzieren Sie Ihre Ansicht Modell dazu:

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

und Ihre Datatemplate Um dies zu ändern:

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

Einbau-Typ-Konvertierung automatisch eine Imagesource aus dem String Dateipfad erstellen.

+0

Danke das hat funktioniert, es gibt ein zweites Problem, ich habe meine Frage aktualisiert – Boardy

+0

Set 'Orientation =" Horizontal "' auf der StackPanel. – Clemens

+0

Danke so einfach. Vielen Dank für Ihre Hilfe sehr geschätzt – Boardy

Verwandte Themen