WPF - Listbox中的图像控件

时间:2010-10-07 04:44:14

标签: wpf image listbox

我在列表框中显示图像。使用对象通过列表框的datacontext绑定图像控件的源。

问题:如果网址没有图片,我想显示无图像(图像)。是否可以在xaml代码中执行此操作。

代码:

 <ListBox ClipToBounds="False" x:Name="lbBestSellerImage" Width="Auto" 
  ItemsSource="{Binding}" ItemsPanel="{DynamicResource iptListBox}" 
 ItemContainerStyle="{DynamicResource ListBoxItemStyle}" />

 <Style x:Key="ListBoxItemStyle" TargetType="{x:Type ListBoxItem}">
        <Setter Property="Background" Value="Transparent"/>
        <Setter Property="Padding" Value="2,0,0,0"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ListBoxItem}">
                    <Grid Width="150">
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition/>
                        </Grid.RowDefinitions>
                        <Image HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="0" x:Name="img" Source="{Binding ImageUrl}" Height="74" Stretch="Fill" Width="75"/>                                    
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

1 个答案:

答案 0 :(得分:3)

最简单的方法是创建一个在uri中传递的新值转换器,并返回一个BitmapImage ...然后可以判断uri是否可用...如果可用,只需将uri加载到一个BitmapImage,否则加载一个默认的BitmapImage!

public class ImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        string uri = (string)value;
        if (string.IsNullOrEmpty(uri))
            return new BitmapImage(new Uri(uriToMyDefaultImage));

        return new BitmapImage(new Uri(uri));

    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

以下值转换器需要一个表示图像的uri的字符串...如果它为null或为空,则显示默认图像,否则它只是加载图像!