我正在开发Windows Phone应用程序,该应用程序基本上包括电话联系人。我正在使用Contacts类获取所有电话联系人,并将联系人数据存储在隔离的存储中。由于无法序列化图像,因此在序列化之前将它们转换为byte []。我的代码是:
foreach (var result in e.Results)
{
if (result.PhoneNumbers.FirstOrDefault() != null)
{
BitmapImage bmp2 = new BitmapImage();
bmp2.SetSource(result.GetPicture());
listobj.Add(new AddressBook()
{
FirstName = result.DisplayName ?? "",
imageBytes = AddressBook.imageConvert(bmp2),
EmailAddress = "",
LastName = "",
Phone = result.PhoneNumbers.FirstOrDefault().PhoneNumber ?? "",
});
}
}
当Contact没有图片时,它在行上显示Argument null异常错误:
bmp2.SetSource(result.GetPicture());
因此,当联系人图像为空时,我想使用一些自定义图像(“ /Images/ci2.png”或任何空白图像也可以使用)。
我的xaml代码是:
<StackPanel Margin="0,0,0,2" Orientation="Horizontal">
<StackPanel Width="80" Orientation="Horizontal" Height="80">
<Ellipse Margin="0" Height="70" Width="70" HorizontalAlignment="Left" Stroke="{x:Null}">
<Ellipse.Fill>
<ImageBrush Stretch="Fill" ImageSource="{Binding imageByte, Converter={StaticResource BytesToImageConverter}}"/>
</Ellipse.Fill>
</Ellipse>
</StackPanel>
<StackPanel Height="80" Margin="0" Width="380" HorizontalAlignment="Left">
<TextBlock FontWeight="Bold" Text="{Binding FirstName}" FontFamily="Segoe WP Semibold" FontSize="30" VerticalAlignment="Top" Margin="5,0,0,0" HorizontalAlignment="Left" />
<TextBlock Text="{Binding Phone}" FontFamily="Segoe WP" FontSize="24" Margin="5,0,0,-12" Width="320" HorizontalAlignment="Left" VerticalAlignment="Top">
<TextBlock.Foreground>
<SolidColorBrush Color="#FFCFC9C9"/>
</TextBlock.Foreground></TextBlock>
</StackPanel>
</StackPanel>
我的问题是,当
bmp2.SetSource(result.GetPicture());
一片空白?谢谢
最佳答案
我看到两个问题。
<Ellipse.Fill>
<ImageBrush Stretch="Fill" ImageSource="{Binding imageByte, Converter={StaticResource BytesToImageConverter}}"/>
</Ellipse.Fill>
您有一个
{Binding imageByte}
,但是在C#代码中有listobj.Add(new AddressBook()
{
FirstName = result.DisplayName ?? "",
imageBytes = AddressBook.imageConvert(bmp2),
// ...
});
imageBytes!= imageByte
除非您没有显示完整的代码。
就像其他海报所说的那样,从资源文件中进行设置。他的代码将导致错误,因为它包含一个额外的“ /”,因此请将其更改为...。
if (result.GetPicture() != null)
{
bmp2.SetSource(result.GetPicture());
}
else
{
bmp2.SetSource(Application.GetResourceStream(new Uri(@"Images/ci2.png", UriKind.Relative)).Stream);
}