Da ich momentan Urlaub habe, konnte ich mich heute aus Lust und Laune mal wieder dem Thema Silverlight etwas nähern, wobei folgende Anwendung entstanden ist…
Zuerst war es wichtig, das mein Server den Datenrequest zustimmt und das wird mit einer Policy, in der crossdomain.xml erledigt. Diese Datei muss sich im Root befinden und folgenden Inhalt besitzen:
crossdomain.xml:
<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from secure="true" domain="*" />
</cross-domain-policy>
Anschließend konnte mit der Entwicklung begonnen werden. Zuerst definierte ich eine XML Datei, die die Datenstruktur für die Anzeige enthalten sollte. Diese persons.xml enthält die Personen, die als Visitenkarte zur Anzeige gebracht werden sollen.
persons.xml
<?xml version="1.0" ?>
<Persons>
<Person>
<Name>Daniel</Name>
<Street>Musterstr. 6</Street>
<Zip>12699</Zip>
<Location>Berlin, Germany</Location>
<Picture>http://servername/pfadzumbild.jpg</Picture>
</Person>
<Person>
<Name>Katrin</Name>
<Street>Musterstr. 6</Street>
<Zip>10059</Zip>
<Location>Berlin, Germany</Location>
<Picture>http://servername/pfad2zumbild.jpg</Picture>
</Person>
</Persons>
Danach ging es nur noch ums Daten holen, auseinander pflücken und dem Control zuzuweisen…
Page.xaml.cs
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
LoadXml();
}
private void LoadXml()
{
Uri uri =
new Uri
("http://host/pfadzur/persons.xml");
WebClient client =
new WebClient
();
client.
DownloadStringCompleted +=
new DownloadStringCompletedEventHandler
(client_DownloadStringCompleted
);
client.DownloadStringAsync(uri);
}
void client_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
//Wenn Fehler dann stoppen
if (e.Error != null)
{
Debugger.Break();
return;
}
//sonst weiter
StringReader sr =
new StringReader
(e.
Result);
XmlReader xr = XmlReader.Create(sr);
XDocument xdoc = XDocument.Load(xr, LoadOptions.None);
var query = from item in xdoc.Descendants(XName.Get("Person"))
{
PersonImage = item.Element(XName.Get("Picture")).Value,
PersonLocation = item.Element(XName.Get("Location")).Value,
PersonName = item.Element(XName.Get("Name")).Value,
PersonStreet = item.Element(XName.Get("Street")).Value,
PersonZip = item.Element(XName.Get("Zip")).Value
};
List<karte> visitenkarten =
new List<karte>
();
foreach (karte v in query.ToList())
{
visitenkarten.Add(v);
}
VisitenkartenList.ItemsSource = visitenkarten;
}
}
Visitenkarten.xaml.cs
public partial class Visitenkarte : UserControl
{
public Visitenkarte()
{
// Required to initialize variables
InitializeComponent();
this.
Loaded +=
new RoutedEventHandler
(Visitenkarte_Loaded
);
}
void Visitenkarte_Loaded(object sender, RoutedEventArgs e)
{
karte k = this.DataContext as karte;
if (k != null)
{
_Name.Text = k.PersonName;
_Strasse.Text = k.PersonStreet;
_PLZ.Text = k.PersonZip;
_Ort.Text = k.PersonLocation;
if (!string.IsNullOrEmpty(k.PersonImage))
{
Uri uri =
new Uri
(k.
PersonImage, UriKind.
Absolute);
ImageSource imgSource =
new BitmapImage
(uri
);
_image.Source = imgSource;
}
}
}
}
karte.cs
public class karte
{
public string PersonName { get; set; }
public string PersonStreet { get; set; }
public string PersonZip { get; set; }
public string PersonLocation { get; set; }
public string PersonImage { get; set; }
}
Das ganze ist dann schnell fertig gestellt und in eine Seite eingebunden. Bitte achtet nicht auf’s Layout, ich bin Entwickler
Das Projekt kann im Downloadbereich heruntergeladen werden.
Achja... das ist mein Zeigefinger um Missverständnisse vorzubeugen
Letzte Kommentare