Ben
Ben

Reputation: 4319

WPF and Powershell - Handling events

Can anyone point me in the right direction for some documentation about handling WPF UI events in Powershell?

I want to know how to, for example, call a function when a CheckBox or Radio Button is changed.

Cheers!

Ben

Upvotes: 3

Views: 6627

Answers (3)

Richard L.
Richard L.

Reputation: 11

ok, it's a long shot because this post is from 2015, but i tried and it's not working for me. It doesn't rise an error but i don't have access to sender properties

Get-Variable -Name Ctrl_* -ValueOnly | Where-Object {$_.Name -match '^btn_[^_]+_Nav_(Previous|Next)$'} | ForEach-Object {
    $_.Add_Click({
        $sender = [System.Windows.Controls.Button]$args[0]
        $sender.Name
    })
}

I try to make a generic navigation system for an hmi

Best Regards, Richard

Upvotes: 1

stej
stej

Reputation: 29449

Considering WPF and PowerShell, have a look at WPF Linkcollection for PowerShell from Bernd. You will find many interesting links that will help you.

Considering your problem, just use pattern

$control.Add_<someevent>({ what to do })

For example, someevent could be Click for a Button:

$button.Add_Click({ $global:clicked = $true })

You pass in a scriptblock that handles the event.

Upvotes: 7

TechSpud
TechSpud

Reputation: 3518

Late to the party (by over 4 years). Specifically addressing jpierson's comment.

But in case anyone finds this post, as I did, via Googling PowerShell WPF event handling, wanting to obtain the Sender control (sender) & Event Args (e), here's how...

C# version (non-specific template)

private void Handler(object sender, SomeEventArgs e)
{
  //do something with sender and/or e...
}

PowerShell version

$WPFControl.Add_Handler({
  $sender = $args[0]
  $e      = $args[1]
  #do something with sender and/or e...
})

And onto a specific MouseWheelHandler event handler

C# version (where the MouseWheelHandler event has been bound to a control)

private void ScrollViewer_PreviewMouseWheel(object sender, MouseWheelEventArgs e)
{
  ScrollViewer scv = (ScrollViewer)sender;
  //do something with sender and/or e...
}

PowerShell version

$ScrollViewer.Add_PreviewMouseWheel({
  $sender = [System.Windows.Controls.ScrollViewer]$args[0]
  $e      = [System.Windows.Input.MouseWheelEventArgs]$args[1]
  #do something with sender and/or e...
})

In PowerShell, to get the types of sender and event args, use the following

$ScrollViewer.Add_PreviewMouseWheel({
  Write-Host $args[0]
  Write-Host $args[1]
})

which (in the above example) will give you...

System.Windows.Controls.ScrollViewer
System.Windows.Input.MouseWheelEventArgs

Upvotes: 11

Related Questions