我对Silverlight很新,但我确实掌握了它。我的问题是如何获取我通过Webclient下载的XML,并将其放入自定义控件中?例如,XML包含标题,图像,描述,pubdate等的数据,然后在画布中我放置文本块来保存XML中的数据。为了进一步提出我的问题,如何制作画布的副本并将其放入每个包含其适当数据的堆栈面板中?我的xml编码如此。
<?xml version="1.0" encoding="us-ascii"?>
<UGR>
<item>
<title>Sample 1</title>
</item>
<item>
<title>Sample 2</title>
</item>
<item>
<title>Sample 3</title>
</item>
<item>
<title>Sample 4</title>
</item>
至于我的.cs中的这一点,我有
public Home()
{
InitializeComponent();
WebClient UGRload = new WebClient();
UGRload.DownloadStringCompleted += new DownloadStringCompletedEventHandler(UGRload_DownloadStringCompleted);
UGRload.DownloadStringAsync(new Uri("UGR.xml"));
}
private void UGRload_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error != null)
{
XDocument xmlSource = XDocument.Parse(e.Result);
var news = from ugrItem in xmlSource.Descendants("item")
select new NewsItemSetup
{
Title = (string)ugrItem.Element("title").Value,
};
newsview.ItemsSource = news;
}
}
至于我想把从xml收到的数据放在哪里,这里是我创建画布的地方。
<Grid x:Name="LayoutRoot">
<ListBox Canvas.Left="116" Canvas.Top="8" Height="464" x:Name="newsview" Width="518" Foreground="White">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Title}" Margin="5" Foreground="White"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Canvas>
</Grid>
文本块是否必须是数据绑定,然后将整个画布转换为用户控件,以便将xml数据编码到相应的文本块?任何帮助或建议都会很棒,谢谢。
答案 0 :(得分:0)
您应该使用某种类型的ItemsControl来显示绑定集合中的每个元素。 ListBox(派生自ItemControl)似乎是这样的东西的流行选择(我更喜欢使用原始的ItemsControl - 但它取决于ListBoxey我的UI的方式)。在ItemsControl / ListBox的ItemTemplate中定义“NewsItem”XAML。
对于ItemsControl绑定的ItemsSource属性中的每个集合元素(您的XML节点),您将获得ItemTemplate的XAML的新副本。它将DataContext设置为集合中的项目 - 准备绑定。这些项目是根据为ItemsControl定义的任何Panel(可配置)进行排列的。
阅读this。 (既然你说你是SL的新手,我建议你从一开始就阅读整篇博文)