Silverlight - Load xaml or xap
L'avantage de silverlight c'est sa richesses focntionnelle, mais cependant cela peut rapidement devenir problématique lorsque l'on aborde un projet multi-activités (Gestion Client / Gestion Produit / Gestion ...).
Toutes les parties seront intégrées dans un seul et même fichier XAP. Celui-ci va donc rapidement devenir gros et difficile à charger.
Pour ce faire, nous avons la possibilité de développer des parties d'interface (Xaml) ou même des briques logiciels que nous chargerons uniquement lorsque nous en aurons besoin.
Il suffit pour ce faire d'utiliser la méthode de téléchargement décrite dans le tutoriale précédent et de charger l'objet dans notre projet.
Voilà la méthode :
Chargement d'un fichier XAML décrivant tout ou partie d'une interface graphique :
|
WebClient client = new WebClient(); client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(OnDownloadCompleted); Uri uri = new Uri("xaml.ashx", UriKind.Relative); client.DownloadStringAsync(uri);
// Méthode de récupération et surtout d'affectation du XAML
void OnDownloadCompleted(object sender, DownloadStringCompletedEventArgs e) { // Analyse du XAML pour la création d'un UIElement string xaml = e.Result; UIElement dom = XamlReader.Load(xaml) as UIElement;
// Append to the DOM Placeholder.Children.Clear(); Placeholder.Children.Add(dom); }
|
Chose très importante : Toute description XAML pourra être affectée en tant que Children d'un UIElement déjà existant.
Chargement d'un fichier XAP définissant un projet complet :
public partial class Page : UserControl { private UIElement content = null; private TabItem item = null;
public Page() { InitializeComponent(); }
private void chkNewContent_Click(object sender, RoutedEventArgs e) { bool shouldDisplay = (sender as CheckBox).IsChecked.Value;
if (shouldDisplay) { if (!IsContentAvailable()) DownloadContent(); else ShowContent(); } else { HideContent(); } }
private bool IsContentAvailable() { return (content != null); }
private void DownloadContent() { Downloader dl = new Downloader(); dl.XapDownloaded += new EventHandler<XapEventArgs>(OnPackageDownload); dl.LoadPackage("more.xap", "more.dll", "More.ExtraTab"); }
void OnPackageDownload(object sender, XapEventArgs e) { content = e.DownloadedContent; ShowContent(); }
private void HideContent() { this.TabList.Items.Remove(item); }
private void ShowContent() { item = new TabItem(); item.Header = "Extra tab"; item.Content = content; this.TabList.Items.Add(item); } }
|
.gif)
|