2013-07-10 37 views
0

我有一个ListBox,应该显示与每个项目的图片。我编写代码,当我运行它时,图片无法显示,但只显示文本。我的代码中有什么错误?我确保图像文件路径是正确的。c#为什么ListBoxItem不能显示每张图片(左侧)?

我想显示每个项目的文字(右侧)和图标(左侧)。

WPF:

<ListBox Name="ListTest" DisplayMemberPath="Name" HorizontalAlignment="Left" Height="358" Margin="603,38,0,0" VerticalAlignment="Top" Width="361"> 
</ListBox> 

C#

public partial class UserControl2 : UserControl 
{ 
    public UserControl2() 
    { 
     InitializeComponent(); 
     this.LoadLogos(); 
    } 

    private void LoadLogos() 
    { 
     this.ListTest.Items.Add(new CompanyDataContext("Adobe", "Adobe is a designing tool.", "/Company Logos/testDinner.jpg")); 
     this.ListTest.Items.Add(new CompanyDataContext("Facebook", "FedEx is a social networking website.", "/Company Logos/facebook.jpg")); 
     this.ListTest.Items.Add(new CompanyDataContext("FedEx", "FedEx is a courier company.", "/Company Logos/fedex.jpg")); 

    } 

    private class CompanyDataContext 
    { 
     public CompanyDataContext(string name, string about, string image) 
     { 
      this.Name = name; 
      this.About = about; 
      this.Image = image; 
     } 

     public string Name { get; private set; } 
     public string About { get; private set; } 
     public string Image { get; private set; } 
    } 
} 

回答

1

您需要CompanyDataContext一个DataTemplate,因为它不从Visual继承,WPF不知道如何因此使其它调用ToString方法上这个。

这可以用aDataTemplate进行处理为ListBox

未经测试的模板:

<ListBox.ItemTemplate> 
            <DataTemplate> 
                <Border x:Name="bord" CornerRadius="5" Margin="2" BorderBrush="LightGray" BorderThickness="3" Background="DarkGray"> 
                    <StackPanel Margin="5"> 
                        <TextBlock x:Name="txt" Text="{Binding Name}" FontWeight="Bold"/> 
                        <Image Source="{Binding Image}" Height="100"/> 
                    </StackPanel> 
                </Border> 

            </DataTemplate> 
</ListBox.ItemTemplate> 

编辑错字

+0

我觉得Dockpanels会在这种情况下最好的。 – Master117

+1

而你并不是指ControlTemplate,你的意思是DataTemplate ...至少我希望如此:) – dowhilefor

+0

Dockpanels在这里不是必需的,上面的项目模板应该可以做到。 @dowhilefor感谢提示。 – Samuel

相关问题