.NET GUI

.NET Community rund um alle Graphical User Interface (GUI) Themen.
Willkommen bei .NET GUI. Anmeldung | Registrieren | Hilfe | Impressum | Forumsregeln
in Suchen

XAML dynamisch laden

Letzter Beitrag 05-08-2008 0:27 von jpkleinau. 1 Antworten.
Seite 1 von 1 (2 Treffer)
Beiträge sortieren: Zurück Weiter
  • 04-14-2008 14:59

    • Norbert Eder
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 04-09-2008
    • Graz / Austria
    • Beiträge 325
    • Punkte 4.969
    • ForumsAdministrator

    XAML dynamisch laden

    In manchen Fällen ist es durchaus sinnvoll, XAML dynamisch zu laden. Beispielsweise um wesentlich mehr Möglihckeiten der Veränderung zu bieten. Hier ein kleines Beispiel das zeigt, wie XAML dynamisch geladen werden kann.

    Im ersten Schritt wird dazu ein normales WPF Application Projekt angelegt. Daran müssen keine großen Veränderungen vorgenommen werden. Das in Window1 vorgeschlagene Grid habe ich in diesem Beispiel gegen ein StackPanel ausgetauscht. Nun wurde dem Projekt eine Page namens PageToLoad hinzugefügt. In den Eigenschaften wurde die Build Action auf Content gestellt und angegeben, dass diese immer zu kopieren ist, zudem wurde das Codebehing-File gelöscht. Natürlich kann diese Page auch manuell in einem Editor angelegt und später in den Anwendungsordner kopiert werden.

    Die Page sieht folgendermaßen aus:

    <Page 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="PageToLoad" Height="108">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" MinHeight="31" />
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
            
            <Label Grid.Row="0" 
                   Content="Content Loaded dynamically" 
                   FontFamily="Arial" 
                   FontSize="18" 
                   FontWeight="Bold"
                   HorizontalAlignment="Center"/>
            <Button Grid.Row="1" 
                    Margin="81,16,87,0" 
                    Name="PageButton" 
                    Height="35" 
                    VerticalAlignment="Top">
                Click Me
            </Button>
        </Grid>
    </Page>  

    Im nächsten Schritt wird die Codebehind-Datei des Fensters angepasst und sieht insgesamt so aus:

    public partial class MainWindow : Window
    {
        Button _remoteButton;
    
        public MainWindow()
        {
            InitializeComponent();
            LoadXAMLMethod(); 
        }
        
        public void LoadXAMLMethod()
        {
            try
            {
                StreamReader sReader = 
                    new StreamReader("PageToLoad.xaml");
                DependencyObject doRoot = 
                    XamlReader.Load(sReader.BaseStream) 
                        as DependencyObject;
                _remoteButton = 
                    LogicalTreeHelper.FindLogicalNode(doRoot, "PageButton") 
                        as Button;
                _remoteButton.Click += 
                    new RoutedEventHandler(Button_Click);
                this.Content = doRoot;
            }
            catch (FileNotFoundException ex)
            {
                MessageBox.Show(ex.Message.ToString());
            }
        }
        public void Button_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Call from loaded XAML");
        }
    
    }

    Nun muss die Anwendung nur noch kompiliert und gestartet werden und schon kann der erste Test erfolgen.

    Ein Beispielprojekt kann hier bezogen werden.

    Abgelegt unter: ,
    • Beitragspunkte: 20
    • IP-Adresse ist Registriert
  • 05-08-2008 0:27 Antwort zu

    • jpkleinau
    • Top 10 Mitwirkender
      Männlich
    • Registriert am 05-07-2008
    • Frankfurt am Main
    • Beiträge 30
    • Punkte 455

    Re: XAML dynamisch laden

    Hallo Norbert, kein schlechter Anfang, doch leider wird man neben ein paar Verbesserung im Coding des Beispiels (logisch, ist ja nur ein Beispiel Embarrassed ) nicht umhin kommen, bei dem zu ladenden XAML im XML herumzudoktern. Was da so alles auf einen zukommen kann, habe ich mal versucht hier in dem Artikel "Play it again XAML Reader" zusammen zu fassen.
    Kein Bammel vor XAML
    XAMLBlog
    • Beitragspunkte: 5
    • IP-Adresse ist Registriert
Seite 1 von 1 (2 Treffer)
Powered by Community Server (Commercial Edition)    Hosting powered by 69° media solutions