Silverlight Objekte aus Xaml (XML) mit XamlReader dynamisch erzeugen

otto fischer 14. December 2008 19:11

Der Beitrag beschreibt, wie mit Hilfe von XamlReader.Load Silverlight-Objekte dynamisch aus XML (Xaml) erstellt werden können.

Es gibt zahlreiche Gründe, Silverlight-Objekte dynamisch zu erstellen. Unter anderem gewinnst Du viel Flexibilität für Deine Anwendung.

InitializeFromXaml, XamlReader, XamlWriter sind die üblichen Verdächtigen, wenn es um das dynamische Erzeugen von Objekten aus XML geht.

InitializeFromXaml wurde schon in der Beta-Phase abgeschafft, XamlWriter gibt es nur in der WPF und übrig bleibt der XamlReader.

Um die Verwendung zu testen habe ich ein kleines Programm geschrieben - Du kannst (zusätzliche) Buttons hinzufügen - und auch wieder entfernen:

    1 using System;

    2 using System.Collections.Generic;

    3 using System.Linq;

    4 using System.Net;

    5 using System.Windows;

    6 using System.Windows.Controls;

    7 using System.Windows.Documents;

    8 using System.Windows.Input;

    9 using System.Windows.Media;

   10 using System.Windows.Media.Animation;

   11 using System.Windows.Shapes;

   12 using System.Windows.Markup;

   13 

   14 namespace FromXaml

   15 {

   16     public partial class Page : UserControl

   17     {

   18         public Page()

   19         {

   20             InitializeComponent();

   21         }

   22 

   23         static int nr = 0;

   24         private void OnCreateRectangle(object sender, RoutedEventArgs e)

   25         {

   26             string s;

   27             s = "<Rectangle Fill=\"#FFFF0000\"  Name=\"_rectangle1\"  Width=\"20\" Height=\"20\"  " +

   28                 "Grid.Row=\"1\" " +

   29                   "xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" />";

   30             //+"<Ellipse Width=\"30\" Height=\"30\" Fill=\"Red\"></Ellipse>"

   31             UIElement o =

   32             (UIElement)XamlReader.Load(s);

   33             ((Grid)LayoutRoot).Children.Add(o);

   34             ((Button)e.OriginalSource).IsEnabled = false;

   35         }

   36 

   37         private void OnCreateButton(object sender, RoutedEventArgs e)

   38         {

   39               string s = "<Button Width=\"100\"  " +

   40                      "Grid.Row=\"2\" " +

   41                  "Height=\"25\" Content=\"Xaml Button " + nr++.ToString() + "\" Margin=\"5\" " +

   42                   " xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" />" ;

   43               UIElement o =

   44                  (UIElement)XamlReader.Load(s);

   45               spBtn.Children.Add(o);

   46               ((Button)o).Click += new RoutedEventHandler(OnNewButtonClick);

   47         }

   48 

   49         void OnNewButtonClick(object sender, RoutedEventArgs e)

   50         {

   51             spBtn.Children.Remove((UIElement) e.OriginalSource);

   52         }

   53     }

   54 }

Achte auf den Namespace in den Zeilen 29 und 42. XamlReader.Load ist auf den Namespace angewiesen.

Das zugehörige Xaml:

<UserControl x:Class="FromXaml.Page"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Width="400" Height="300">
    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.RowDefinitions >
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <StackPanel Orientation="Horizontal" >
         <Button Width="100" Click="OnCreateRectangle"
                 Height="25" Content="Create Rectangle" 
                 Margin="5">
         </Button>
            <Button Width="100" Click="OnCreateButton"
                 Height="25" Content="Create Button" 
                    Margin="5">
            </Button>
        </StackPanel>
        <ScrollViewer Grid.Row="2">
        <StackPanel x:Name="spBtn" 
                    Orientation="Vertical">
        </StackPanel></ScrollViewer>
    </Grid>
</UserControl>

Currently rated 5.0 by 2 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags: , , ,

C# | Silverlight

Comments

Comments are closed

Blogverzeichnis - Blog Verzeichnis bloggerei.de Add to Google Blog-Webkatalog Bloggeramt.de

Calendar

<<  February 2010  >>
MoTuWeThFrSaSu
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

View posts in large calendar

Bücher

silverlight-3-crashkurs

Bücher zur Entspannung - SF, Fantasy

 

Silverlight-city.de Otto's Blog Datenschutz Impressum Lesefutter