如何在具有绑定数据的列表框中显示占位符图像
本文关键字:列表 显示 图像 占位符 数据 绑定 | 更新日期: 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"/>
当加载项目时,url
的Getter
被激发。因此,使用Setter
用Bitmapimage
替换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"/>