如何在具有绑定数据的列表框中显示占位符图像

本文关键字:列表 显示 图像 占位符 数据 绑定 | 更新日期: 2023-09-27 18:02:17

在windows phone 8上,我制作了一个列表框,其中包含一个web服务器数据,这些数据是图像和文本,有时服务器只返回文本,因为它们不是用户上传的图像。我需要显示一个占位符图像。

<ListBox Grid.Row="1"  ItemsSource="{Binding places}" Name="mrx" Margin="0,10,0,0" Loaded="mrx_Loaded">
   <ListBox.ItemTemplate>
     <DataTemplate >
       <StackPanel Orientation="Horizontal" Margin="10,0,10,8">
         <StackPanel  Margin="10,0,10,8">
           <TextBlock Text="{Binding name}" Foreground="Black" FontWeight="Bold" FontSize="40"/>
           <Image Source="{Binding url}" Width="100" Height="100"/>
         </StackPanel>
       </StackPanel>
     </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

这里我如何访问网址:

public BitmapImage h { get; set; }
public BitmapImage url
{
   get { return h; }
   set
   {
     if (h == null)
     {
       h.UriSource = new Uri("profile-placeholder.gif", UriKind.RelativeOrAbsolute);
     }
   }
}

如何在具有绑定数据的列表框中显示占位符图像

如果您的h == null在没有返回图像的情况下,那么有一种更简单的方法可以执行您想要的操作-在Binding:中使用TargetNullValue

<Image Source="{Binding url, TargetNullValue='/Example;component/Resources/placeholder.png'}" Width="100" Height="100"/>

在上述情况下,请确保将placeholder.png的BuildAction设置为Resource。(这里的Example是您的项目名称,Resources是文件的路径(。在这种情况下,您也可以直接绑定到您的h

如果你坚持使用设计属性,那么:

我不确定你的代码的其余部分是什么样子的,但当你定义了这样的绑定时:

<Image Source="{Binding url}" Width="100" Height="100"/>

当加载项目时,urlGetter被激发。因此,使用SetterBitmapimage替换null在这里没有帮助(当然,如果你不是在其他地方运行Setter,而是在没有value的情况下定义Setter——这有点奇怪,可以用不同的方法实现,或者提供单独的方法

检查这是否有帮助:

public BitmapImage url
{
    get
    {
        if (h == null)
          return new BitmapImage() { UriSource = new Uri("/Projectname;component/path/profile-placeholder.gif", UriKind.Relative) };
        return h;
    }
}

设置UriSource还取决于文件在项目中的定义方式(构建操作(,您可以在此处查看。

根据我的说法,你可以尝试2个选项

1( 制作图像的图像失败事件,并在调用时将默认图像设置为源。

2( 将图像视图放在一个以背景作为默认图像的网格中,这样,如果url出现,它将与默认图像重叠,并向您显示用户图像,如果失败,则图像的背景将作为默认图像出现。

我希望这会有所帮助。。。。。。

在资产中添加默认图像。将此图像路径字符串设置为用于绑定的"url"的默认值。当您得到一个web响应并解析它时,请检查图像是否有一个有效的url路径字符串。如果为图像解析了有效的url字符串,则将其分配到"url"字段。否则,如果没有图像的有效url字符串,请不要将其设置到url字段。"url"字符串字段将以任何方式包含您设置的默认图像。希望这对你有帮助。谢谢

请参阅条件文本格式XAML WP8

如果url为null,则应该绑定到url并设置条件触发器。

<Image Source = "{Binding url} " Width="100" Height="100"/>

这里,不是将图像源直接绑定到URL,而是将其绑定到将URL作为全局变量的属性,并将URL初始化为占位符URL。

示例:

private string yourURL= "/Resources/Images/placeholder.png";
public string YourURL
{
    get
    {
        return yourURL;
    }
    set
    {
        if (value != yourURL)
        {
            yourURL= value;                   
        }
    }
}

并且语句将类似于:

<Image Source="{Binding YourURL}" Width="100" Height="100"/>