显示图像时出现问题

本文关键字:问题 显示图 图像 显示 | 更新日期: 2023-09-27 18:21:51

好吧,这是我的问题:

  • 我有一个自定义类,有一个项目列表,每个项目都有一个与之相关的图像路径
  • 我在项目中添加了一个包含图像的文件夹(所以我想XAP中也添加了图像,是吗?)
  • 当我试图在XAML中绑定图像项的Source时,它不起作用

<ListBox Margin="0,0,-12,0" ItemsSource="{Binding Items}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
                <Image Height="100" Width="100" Margin="12,0,9,0" Source="/AlbumArt/{Binding AlbumArt}"/>
                <StackPanel Width="311">
                    <TextBlock Text="{Binding Title}" TextWrapping="Wrap" Style="{StaticResource PhoneTextLargeStyle}"/>
                    <TextBlock Text="{Binding Author}" TextWrapping="Wrap" Margin="12,-6,12,0" Style="{StaticResource PhoneTextSubtleStyle}"/>
                </StackPanel>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

我做错了什么?有什么想法吗?


p.S.

  • 我也尝试过Source="{Binding AlbumArt}",但它仍然没有显示任何内容。

  • 最疯狂的是,如果我将Source设置为特定的图像(例如/AlbumArt/someImage.jpg),那么该图像在VisualStudio&Emulator。

显示图像时出现问题

我不认为绑定是这样工作的。如果不可能在图像路径属性(即AlbumArt)前加上字符串"/AlbumArt/",我建议使用转换器

此外,只有当目标属性是字符串时,格式化字符串才有效,因此StringFormat已禁用。如果我对StringFormat 有错误,请有人纠正我

如果您有绑定问题,请始终查看输出窗口以获取详细信息。这就是显示绑定错误信息的地方。

Source="/AlbumArt/{Binding AlbumArt}"将不起作用,因为它将被视为一个字符串。

如果没有看到你的类,很难确定,但你绑定到的属性("AlbumArt")应该是Uri,而不是string,并且应该用与图像相对的Uri填充。该图像还应设置为具有Content的构建操作。

您所要做的就是。。

<Image Height="100" Width="100" Margin="12,0,9,0" Source="{Binding ImagePath}"/>

正如你所说的,你有一个项目列表(我认为这将是一个也有图像路径的类),所以把这个属性放在这个类中,对于每个项目,把对应项目的路径放在这个属性中。

private string _ImagePath;
public string ImagePath
{
   get
   {
     return _ImagePath;
   }
   set
   {
    _imagePath = value;
   }
}

如果在项类中实现INotifyPropertyChanged,效果会更好。

让自己变得更诚实怎么样。

private string _AlbumArt;
public string AlbumArt
{
   get
   {
     return _AlbumArt;
   }
   set
   {
if(_AlbumArt!=null)
    _AlbumArt=@"/AlbumArt/"+ value;
   }
}

和绑定

<Image Height="100" Width="100" Margin="12,0,9,0" Source="{Binding AlbumArt}"/>

我敢肯定你刚才用错了路径,试试这个。。。。

"/ApplicationName;component/AlbumArt/{Binding AlbumArt}"

当然,将ApplicationName部分替换为您的应用程序名称。确保用%20 替换其中的空格