无论如何通过 XAML 事件侦听器传递 WPF 控件以在后面的代码中使用?
Is there anyway to pass a WPF Control through an XAML event listener to be used in the code behind?
假设我有两个简单的 WPF 控件:
<Button x:Name="btnOne" Content="Test" Click="btnOne_Click" />
<Button x:Name="btnTwo" Content="TestTwo" />
我是否可以将 btnTwo
控件传递给 WPF btnOne
中的 Click
事件,以便我可以使用它的 btnOne_Click
函数?
我知道我显然可以直接在代码中引用按钮,但我想传递它以最小化我的功能,而不是让 4 个不同的功能做同样的事情。
框架本身已经完成了。
查看点击处理程序的定义:
Button_Click(object sender, RoutedEventArgs e);
如您所见,您有一个 sender 参数,它是触发事件的对象。
因此,如果您设置:
<Button x:Name="btnOne" Content="Test" Click="btn_Click" />
<Button x:Name="btnTwo" Content="TestTwo" Click="btn_Click" />
然后你可以使用 sender 参数来检查哪个按钮被点击了:
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;
}
}
<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;
}
你已经具备了那种能力。
我会有两个不同的 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
点击来自哪个,这会使您的代码更清晰并提高可读性。
假设我有两个简单的 WPF 控件:
<Button x:Name="btnOne" Content="Test" Click="btnOne_Click" />
<Button x:Name="btnTwo" Content="TestTwo" />
我是否可以将 btnTwo
控件传递给 WPF btnOne
中的 Click
事件,以便我可以使用它的 btnOne_Click
函数?
我知道我显然可以直接在代码中引用按钮,但我想传递它以最小化我的功能,而不是让 4 个不同的功能做同样的事情。
框架本身已经完成了。
查看点击处理程序的定义:
Button_Click(object sender, RoutedEventArgs e);
如您所见,您有一个 sender 参数,它是触发事件的对象。
因此,如果您设置:
<Button x:Name="btnOne" Content="Test" Click="btn_Click" />
<Button x:Name="btnTwo" Content="TestTwo" Click="btn_Click" />
然后你可以使用 sender 参数来检查哪个按钮被点击了:
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;
}
}
<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;
}
你已经具备了那种能力。
我会有两个不同的 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
点击来自哪个,这会使您的代码更清晰并提高可读性。