无论如何通过XAML事件监听器传递WPF控件以在后面的代码中使用?

时间:2016-02-26 15:34:19

标签: c# wpf winforms xaml wpf-controls

我们说我有两个简单的WPF控件:

<Button x:Name="btnOne" Content="Test"  Click="btnOne_Click" />
<Button x:Name="btnTwo" Content="TestTwo" />

我是否可以将btnTwo控件传递给WPF Click中的btnOne事件,以便我可以使用btnOne_Click函数?

我知道我可以直接在代码中引用该按钮,但我想通过它来最小化我的功能,而不是有4个不同的功能做同样的事情。

3 个答案:

答案 0 :(得分:2)

这已经在框架上完成了。

查看click的处理程序的定义:

Button_Click(object sender, RoutedEventArgs e);

正如您所看到的,您有一个发件人参数,这是触发该事件的对象。

所以,如果你设置:

<Button x:Name="btnOne" Content="Test"  Click="btn_Click" />
<Button x:Name="btnTwo" Content="TestTwo"  Click="btn_Click" />

然后您可以使用发送者参数来检查单击了哪个按钮:

protected void btn_Click(object sender, RoutedEventArgs e)
{
    Button btn = sender as Button;
    if(btn == null)
        return;

   switch(btn.Name)
   {
       case "btnOne":
          //...
          break;
       case "btnTwo":
          //...
          break;
   }
}

答案 1 :(得分:1)

我会有两个不同的Button点击处理程序,它们都引用相同的方法。如果每个处理器需要不同的业务逻辑,但仍然可以共享相同的核心代码,那么这将允许您拥有两个不同的处理程序。

<强> XAML:

<Button x:Name="btnOne" Content="Test"  Click="Button1_Click" />
<Button x:Name="btnTwo" Content="TestTwo" Click="Button2_Click"/>

<强>代码隐藏:

public void Button1_Click(object sender, RoutedEventArgs e)
{
    HandleButtonClick();
}

public void Button2_Click(object sender, RoutedEventArgs e)
{
    HandleButtonClick();
}

private void HandleButtonClick()
{
    ....
}

如果你这样做,你不必处理点击来自哪个Button,这使你的代码更清晰,并提高了可读性。

答案 2 :(得分:0)

<Button x:Name="btnOne" Content="Test"  Click="btnOne_Click" />
<Button x:Name="btnTwo" Content="TestTwo" />


public void btnOne_Click(object sender, RoutedEvents e){

     btnTwo.Background = Brushes.LightBlue;
     btnOne.BackGround = Brushes.Red;
}

你已经具备了这种能力。