c# - 向 WPF 中的 Button_Click 事件添加参数

标签 c# wpf xaml

我知道之前有人问过这个问题,但经过大约一个小时的搜索,我无法找出向事件处理程序添加参数的最简单方法。默认情况下,这些处理程序的模板只能接受 (object sender, RoutedEventArgs e) 参数。我很难相信没有一种干净简单的方法可以做到这一点,因为我想这个问题经常发生。但是我是 WPF 的新手,所以如果有人可以就此问题提供一些指导,我的代码如下。

当点击这个按钮时

<Button Height="23" VerticalAlignment="Bottom" Margin="150, 0, 0, 2" Content="Terminate All Processes" Width="135" HorizontalAlignment="Left" Click="TerminateAll_Click" Name="TerminateAll"/>

我需要一个事件来触发以关闭我的所有进程。不过,要做到这一点,我需要将所有进程的列表传递给事件处理程序,而且我还没有找到一种简单的方法来做到这一点。感谢您提供的任何帮助。

编辑:这是我的 .cs 文件

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        ObservableCollection<Proc> procs = new ObservableCollection<Proc>();

        Processes.getProcs(ref procs);
        lview.ItemsSource = procs;
    }

    private void TerminateAllProcesses(ObservableCollection<Proc> procs)
    {
        foreach (Proc p in procs)
        {
            if (!p.Pro.HasExited) { p.Pro.Kill(); }
        }
    }

    public void TerminateAll_Click(object sender, RoutedEventArgs e)
    {

    }
}

最佳答案

I need to pass the list of all the processes to the event handler

为什么? 按钮 触发事件,因此它必须有一个已知的参数列表。另外,它不知道进程列表,因此无论如何也不知道要传递什么。但是,没有什么可以阻止您从点击事件中触发另一种方法:

private void TerminateAll_Click(object sender, RoutedEventArgs e) 
{
    List<string> processes = // get the list
    TerminateAll(processes);
}

public void TerminateAll(List<string> processes)
{
   foreach(string process in processes)
     Terminate(process);
}
private void Terminate(string process)
{
  // terminate the process
}

关于c# - 向 WPF 中的 Button_Click 事件添加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31680854/

相关文章:

c# - 快速插入 SQL 数据和相关行的最佳方法是什么?

c# - 使用 DotNetOpenAuth 获取数据?

c# - 如何将sql server数据库schema加上所有表中的数据转换成xml格式

c# - Java+Swing 比 C#+WinForms/WPF 有什么优势?

c# - Xamarin.Forms 中没有交互性的覆盖层

c# - 从控制台中删除特殊字符以加载 txt 文件

c# - 当 child 发生变化时更新 parent

c# - ObservableCollection 项的异步更新

c# - 将新项目添加到数据网格的 ItemsSource 而不引用 Collection

wpf - 将值从百分比转换为不透明度