Imports System.IO
Imports System.Windows.Markup

Public Class MainWindow
  Inherits Window
  Private btSaludo As Button
  Private etSaludo As Label

  Public Sub New(ficheroXaml As String)
    InitializeComponent(ficheroXaml)
  End Sub

  Private Sub InitializeComponent(ficheroXaml As String)
    ' Configurar la ventana MainWindow
    Me.Title = "Ventana WPF: XAML dinámico"
    Me.Height = 200
    Me.Width = 300
    ' Cargar el XAML desde un fichero externo
    'Dim elementoRaiz As DependencyObject
    'Using fs As New FileStream(ficheroXaml, FileMode.Open)
    '  elementoRaiz = DirectCast(XamlReader.Load(fs), DependencyObject)
    'End Using
    '' Insertar el código XAML en la ventana
    'Me.Content = elementoRaiz
    '' Buscar los controles btSaludo y etSaludo
    'btSaludo = DirectCast(LogicalTreeHelper.FindLogicalNode(
    '           elementoRaiz, "btSaludo"), Button)
    'etSaludo = DirectCast(LogicalTreeHelper.FindLogicalNode(
    '           elementoRaiz, "etSaludo"), Label)
    Dim elementoRaiz As FrameworkElement
    Using fs As New FileStream(ficheroXaml, FileMode.Open)
      elementoRaiz = DirectCast(XamlReader.Load(fs), FrameworkElement)
    End Using
    ' Insertar el código XAML en la ventana
    Me.Content = elementoRaiz
    ' Buscar los controles btSaludo y etSaludo
    btSaludo = DirectCast(elementoRaiz.FindName("btSaludo"), Button)
    etSaludo = DirectCast(elementoRaiz.FindName("etSaludo"), Label)
    ' Asignar el controlador para manejar el evento Click
    ' de btSaludo
    AddHandler btSaludo.Click, AddressOf btSaludo_Click
  End Sub

  Private Sub btSaludo_Click(sender As Object, e As RoutedEventArgs)
    etSaludo.Content = "¡¡¡Hola mundo!!!"
  End Sub
End Class

Class Application
  Public Shared Sub Main()
    Dim app As New Application()
    app.Run(New MainWindow("MainWindow.xaml"))
  End Sub
End Class
