【问题标题】:WPF and Powershell - Handling eventsWPF 和 Powershell - 处理事件
【发布时间】:2010-08-05 09:33:32
【问题描述】:

谁能指出我正确的方向,以获得一些有关在 Powershell 中处理 WPF UI 事件的文档?

我想知道如何在 CheckBox 或 Radio Button 更改时调用函数。

干杯!

【问题讨论】:

    标签: wpf powershell wpf-controls


    【解决方案1】:

    迟到(超过 4 年)。专门针对jpierson 的评论。

    但如果有人像我一样通过谷歌搜索 PowerShell WPF 事件处理找到这篇文章,想要获取 Sender 控件 (sender) 和 Event Args (e),方法如下...

    C# 版本(非特定模板)

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

    PowerShell 版本

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

    到一个特定的 MouseWheelHandler 事件处理程序

    C# 版本(MouseWheelHandler 事件已绑定到控件)

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

    PowerShell 版本

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

    在 PowerShell 中,要获取发送者和事件参数的类型,请使用以下内容

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

    哪个(在上面的例子中)会给你...

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

    【讨论】:

    • 我在 SO 和 Microsoft 论坛上搜索了 3 周,没有人能够就简单的问题给我一个答案,如何在 PowerShell 中处理事件,正如我认为的那样简单的。非常感谢,你永远不会迟到;)
    【解决方案2】:

    考虑到 WPF 和 PowerShell,请查看 Bernd 的 WPF Linkcollection for PowerShell。您会发现许多有趣的链接对您有所帮助。

    考虑到您的问题,只需使用模式

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

    例如,对于按钮,someevent 可能是 Click

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

    你传入一个处理事件的脚本块。

    【讨论】:

    • 你如何获得事件参数和/或发件人参数。
    【解决方案3】:

    好的,这是一个很长的镜头,因为这篇文章是 2015 年的,但我试过了,但它不适合我。 它不会出现错误,但我无权访问发件人属性

    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
        })
    }
    

    我尝试为 hmi 制作一个通用的导航系统

    最好的问候, 理查德

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2019-06-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多