Maar wat is nu WPF en XAML?
Windows Presentation Foundation (WPF) is een UI-raamwerk voor het bouwen van Windows-bureaubladtoepassingen. Het gebruikt de eXtensible Application Markup Language (XAML) om op een declaratieve manier weergaven te definiëren. XAML is de XML-variant van Microsoft voor het beschrijven van een GUI. Het heeft ingebouwde ondersteuning voor bronnen, grafische afbeeldingen, gegevensbinding en nog veel meer. Het is een zeer gebruikersvriendelijk UI-framework.
Leuke intro, maar hoe werkt dit?
Geloof het of niet, PowerShell beperkt je niet tot de op tekst gebaseerde interface die bijna synoniem is geworden met een PowerShell-omgeving. Microsoft maakt het mogelijk om een GUI-interface te maken voor je PowerShell-scripts. Op die manier kun je, als je een script hebt dat je aan een eindgebruiker moet geven (of als je zelf liever naar een grafische interface kijkt), loskomen van de standaard blauwe tekstinterface.
Wat is er nodig om een PowerShell GUI te maken?
Toen ik voor het eerst ontdekte dat het mogelijk was om een PowerShell GUI te bouwen, flitsten mijn gedachten meteen terug naar mijn oude Commodore 64-computer, die ik in de jaren negentig gebruikte om programma’s te schrijven. Die computer startte, zoals zoveel andere van die tijd, op naar een op tekst gebaseerde BASIC-programmeeromgeving. Deze omgeving was gebaseerd op de opdrachtregel. Maar als je naar de grafische modus wilde overschakelen, kon je dat doen door een aantal PEEKs en POKEs in te voeren.
Ik verwachtte dat PowerShell een opdracht met de naam Set-GraphicMode zou aanbieden of iets dergelijks, dat zou kunnen worden gebruikt om over te schakelen naar de GUI-modus. Helaas bestaat zo’n commando niet. Hoewel het maken van een GUI voor PowerShell-scripts niet super moeilijk is, kan het zijn dat je een beetje buiten je comfortzone moet gaan, omdat je enkele externe hulpmiddelen zult moeten gebruiken.
Concreet zul je bijvoorbeeld Visual Studio moeten gebruiken. Je hebt ook de Microsoft .NET Framework-versie 4.x nodig en je hebt natuurlijk PowerShell nodig. Voor de nerds onder ons: PowerShell, WPF en XAML-code kan natuurlijk ook gewoon in PowerShell ISE of een andere editor worden geschreven.
Hoe ziet het bouwproces van een PowerShell GUI eruit?
PowerShell wordt geleverd met assembly’s, waarmee native .NET-classes kunnen worden begrepen. Echter, WPF is daar niet één van. Om met WPF in PowerShell te werken, moet je eerst de assembly toevoegen aan de huidige sessie. Dit kan met behulp van de opdracht Add-Type.
Nadat de assembly is geladen, kun je beginnen met het maken van een basisvenster. Om het meest eenvoudige venster in WPF te maken, maak ik een XML-string. Deze kun je naar een XML-object casten met [xml]:
Nadat de XAML-reeks is gemaakt, moet er een object worden gemaakt die de klasse XamlReader begrijpt. Om dat te doen, moet het doorgegeven worden aan de klasse XmlNodeReader als een argument. Hiermee creëer je een XmlNodeReader-object.
Dit XmlNodeReader-object geef je door aan de statische methode Load () in de klasse XamlReader om een venster te maken. Vervolgens gebruik je de ShowDialog ()-methode om het venster op het scherm weer te geven.
De basis is nu gelegd. Hierna kun je elementen aan dit venster toevoegen. Hieronder volgt een voorbeeld van een venster met een tekstblok:
Nu je het standaard frame hebt gemaakt, kun je helemaal losgaan met het toevoegen van tekstblokken, knoppen, radiobuttons, stijl, tabbladen, etc. Eigenlijk alles wat je ook zou kunnen toevoegen aan een webpagina. De laatste stap kan zijn om de losstaande PowerShell-commando’s te koppelen aan functies/knoppen of andere elementen in de XAML-code:
Ik heb een drietal demo-applicaties gemaakt, waarin dit alles samenkomt:
Laat je in het volgende filmpje verrassen met wat er allemaal mogelijk is met PowerShell, WPF en XAML.
https://youtu.be/g8RwmarRQ8I
Hopelijk heb ik jullie enthousiast kunnen maken en gaan jullie hiermee aan de slag!
Voor vragen weet je mij te vinden!
PowerShell, makkelijk met Frank