public/Button.ps1

<#
.SYNOPSIS
A button control
 
.DESCRIPTION
Outputs a WPF Button control with a caption and an action.
 
.PARAMETER Caption
The text on the button
 
.PARAMETER Action
The action performed when the button is clicked
 
.PARAMETER property
Properties to extend/override the base properties defined in the function
 
.PARAMETER name
The Name of the control.
 
.EXAMPLE
(Window {
    TextBox Name
    Button "Say Hello" -Action {$t=$this.Window.GetControlByName('Name');
                                                  Write-Host "Hello, $($t.Text)"}
}).ShowDialog()
 
 
.NOTES
General notes
#>

function Button {
    [CmdletBinding()]
    Param([string]$Caption,
          [ScriptBlock]$Action,
          [hashtable]$property = @{},
          [string]$name)
    $baseProperties = @{
        Content = $Caption
    }
    if($name){
      $baseProperties.Name=$name
    }
    $properties = Merge-HashTable $baseProperties $property
    $btn = new-object System.Windows.Controls.Button -Property $properties
    $btn | add-member -Name Window -MemberType ScriptProperty -Value {[System.Windows.Window]::GetWindow($this)}
    $btn.Add_Click($action)
    $btn
}