无法使用URI源在Silverlight中显示图像

时间:2011-04-20 02:28:08

标签: c# silverlight

您好我正在尝试学习Silverlight。所以我在动作书中获得了Silverlight 4。第一个'Hello World'应用程序让我很难过。这是一个小应用程序,在Twitter上搜索silverlight上的帖子,然后在列表框中显示它们。我正在尝试绑定对象的URI以加载列表框中项目的图像。这没用,所以我尝试了一个静态URI。这没用,所以我尝试制作一个基本图像并将XAML中的源设置为静态URI。这显示了VS2010中预览窗口中的图像,但在我尝试调试时仍然没有图像。所以我想也许会有一些奇怪的事情阻止Silverlight访问外部URI,但我很快意识到这没有任何意义,因为它成功地从twitter获取信息。任何人都知道可能导致这个问题的原因是什么?谢谢!

XAML

   <ListBox x:Name="TweetList"
             HorizontalContentAlignment="Stretch"
             ScrollViewer.HorizontalScrollBarVisibility="Disabled"
             Margin="12 41 12 12">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid Margin="10">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Image Source="{Binding Image}"
                           Grid.Column="0"
                           Margin="3"
                           Width="50"
                           Height="50"
                           Stretch="UniformToFill"/>
                    <TextBlock Text="{Binding Message}"
                               FontSize="14"
                               Margin="3"
                               Grid.Column="1"
                               TextWrapping="Wrap"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

C#

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();
        TweetList.ItemsSource = _tweets;
    }

    private ObservableCollection<Tweet> _tweets =
        new ObservableCollection<Tweet>();

    private void GetTweets_Click(object sender, RoutedEventArgs e)
    {
        WebClient client = new WebClient();

        client.DownloadStringCompleted += (s, ea) =>
            {
                XDocument doc = XDocument.Parse(ea.Result);
                XNamespace ns = "http://www.w3.org/2005/Atom";

                var items = from item in doc.Descendants(ns + "entry")
                            select new Tweet()
                            {
                                Message = item.Element(ns + "title").Value,

                                Image = new Uri((
                                    from XElement xe in item.Descendants(ns + "link")
                                    where xe.Attribute("type").Value == "image/png"
                                    select xe.Attribute("href").Value
                                    ).First<string>()),
                            };

                foreach (Tweet t in items)
                {
                    _tweets.Add(t);
                    System.Diagnostics.Debug.WriteLine(t.Image.ToString());

                }
            };

        client.DownloadStringAsync(new Uri("http://search.twitter.com/search.atom?q=silverlight"));
    }
}

1 个答案:

答案 0 :(得分:0)

使用Image = new Uri("http://a0.twimg.com/profile_images/482914861/fastcompanyred100_normal.jpg")之类的直接uriaddress检查 如果成功,那么您尝试构建的uri字符串可能存在问题