Updated : Ene 11, 2020 in Powershell

Creación de Formulario WPF en Powershell + Xaml

Hoy aprenderemos los principios Básico de creación de formulario WPF combinando el lenguaje xaml y Powershell.


Requisitos

  • Visual studio
  • Editor de texto plano o IDE
  • Compresión avanzada de powershell
  • Conocimiento de XAML

Definiciones


¿ Que es WPF ?

Windows Presentation Foundation (WPF) es una tecnología de Microsoft, presentada como parte de Windows Vista. Permite el desarrollo de interfaces de interacción en Windows tomando características de aplicaciones Windows y de aplicaciones web. Según wikipedia


¿ Que es visual studio ?

Visual Studio es un conjunto de herramientas y otras tecnologías de desarrollo de software basado en componentes para crear aplicaciones eficaces y de alto rendimiento, permitiendo a los desarrolladores crear sitios y aplicaciones web, así como otros servicios web en cualquier entorno que soporte la plataforma. Según msn

Puedes bajar visual studio 100% gratuito en la pagina oficial .


¿Que es XAML?

XAML es el lenguaje de formato para la interfaz de usuario para la Base de Presentación de Windows y Silverlight, el cual es uno de los «pilares» de la interfaz de programación de aplicaciones .NET en su versión 3.0. Según Wikipedia

Creación de interfaz WPF

Primero deberemos crear nuestra interfaz gráfica WPF para poder lograrlo lo valdremos del aplicativo visual studio. Para comenzar crear nuevo proyecto y luego en el buscador escribiremos WPF y seleccionamos la opción de nombre Windows.Presentation Foundation.

En configuración de proyecto le podremos el nombre MainWPF y luego seleccionamos la ubicación donde desea guardarla.

Si todo esta correcto lo debería cargar una plantilla base en blanco para comenzar a trabajar.

Deberán crear su interfaz básica de la forma que mas le guste ,en mi caso creare un pequeño aplicativo que me permita verificar la ubicación de un archivo y luego eliminarla. Por ende mi aplicación contara con dos botones y un campo textbox donde pegar la ruta.

Importante deberán especificar siempre en cada campo un nombre ya que lo utilizaremos para llamarlo mediante código de powershell mas adelante.

Una vez configurada su interfaz copiaremos en un bloc de notas el código XAML que se encuentra debajo del formulario y realizaremos una pequeñas modificaciones para poder utilizarlo en powershell.

Deberemos eliminar las siguiente lineas:

  • x:Class=»MainWPF.MainWindow»
  • xmlns:d=»http://schemas.microsoft.com/expression/blend/2008″
  • xmlns:mc=»http://schemas.openxmlformats.org/markup-compatibility/2006″
  • xmlns:local=»clr-namespace:MainWPF»
  • mc:Ignorable=»d»

Y para terminar remover el fragmento de código de las etiquetas con el siguiente nombre Click=»Button_Click»


Código Powershell

Primero cargamos la librería PresentationFramework para que funcione sin problema nuestro formulario y lo pasamos por un try catch para que notifique en caso de un error.

Verificamos si hay un error a cargar la librería

try{
Add-Type -AssemblyName PresentationCore,PresentationFramework,WindowsBase,system.windows.forms
} catch {
Throw "Failed to load Windows Presentation Framework assemblies."
}

Método opcional

try { Add-Type -AssemblyName PresentationFramework }catch { "Fatal Error" }

Crearemos una variable cual almacenara el código XAML

$xaml = @"
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="800">
    <Grid Background="#FF7AC2EC">
        <Button x:Name="validate" Content="Verificar " HorizontalAlignment="Left" Margin="115,274,0,0" VerticalAlignment="Top" Height="48" Width="209"/>
        <TextBox x:Name="textbox" HorizontalAlignment="Left" Margin="115,141,0,0" Text="Ingresar la ubicación del archivo o directorio que quiere comprobar " TextWrapping="Wrap" VerticalAlignment="Top" Width="554" Height="48"/>
        <Button x:Name="remove" Content="Eliminar" HorizontalAlignment="Left" Margin="460,269,0,0" VerticalAlignment="Top" Height="48" Width="209"/>
        <Label Content="Owicron Aprende y comparte conocimiento " HorizontalAlignment="Left" Margin="55,47,0,0" VerticalAlignment="Top" FontSize="36"/>

    </Grid>
</Window>


"@
 

Invocaremos al objecto XmlNodeReader cual se encargara de leer la información de la variable $xaml

$reader = (New-Object System.Xml.XmlNodeReader $xaml)

Crearemos una variable $window la cual utilizaremos para cargar la información de el objecto nodereader al formulario y con ShowDialog() le indicamos que muestre el formulario

$window = [Windows.Markup.XamlReader]::Load($reader)
$window.ShowDialog()

Código completo

#verificamos si hay un error a cargar la librería 
try { Add-Type -AssemblyName PresentationFramework }catch { "Fatal Error" }


$xaml = @"
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="450" Width="800">
    <Grid Background="#FF7AC2EC">
        <Button x:Name="validate" Content="Verificar " HorizontalAlignment="Left" Margin="115,274,0,0" VerticalAlignment="Top" Height="48" Width="209"/>
        <TextBox x:Name="textbox" HorizontalAlignment="Left" Margin="115,141,0,0" Text="Ingresar la ubicación del archivo o directorio que quiere comprobar " TextWrapping="Wrap" VerticalAlignment="Top" Width="554" Height="48"/>
        <Button x:Name="remove" Content="Eliminar" HorizontalAlignment="Left" Margin="460,269,0,0" VerticalAlignment="Top" Height="48" Width="209"/>
        <Label Content="Owicron Aprende y comparte conocimiento " HorizontalAlignment="Left" Margin="55,47,0,0" VerticalAlignment="Top" FontSize="36"/>

    </Grid>
</Window>


"@
 

 $reader = (New-Object System.Xml.XmlNodeReader $xaml)

$window = [Windows.Markup.XamlReader]::Load($reader)

$window.ShowDialog()

Para añadir alguna acción al presionar un botón deberemos llamar a a la funcion Add_Click{} de la siguiente manera

$validate= $window.FindName("validate")


$validate.Add_Click({
 
  
})

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.