我是WPF / XAML的新手,所以请忍受noob问题。
我设计了一个控制面板,最终将作为我网站的后端,并且刚刚使用TabControl元素完成了选项卡中所有按钮的布局。 (这是使用Visual Studio“窗口”表单设计的。
我的问题是,是否可以在xaml.cs文件中创建一个函数来动态处理我所有按钮元素的特定事件?例如......
我有30多个按钮,不想在c#代码中使用30个不同的Click =“btnCustomers_click”+各自的功能。我想要的是说一个功能,允许我点击任何按钮,然后根据选择的按钮打开一个新窗口。
以下代码是我目前的设计,但对于30多个按钮,它们将有很多功能,而且会很混乱,因此我希望有一个功能控制哪个窗口打开,具体取决于点击的按钮。
private void btnMerchants_click(object sender, RoutedEventArgs e)
{
var newWindow = new frmMerchants();
newWindow.Show();
}
提前感谢任何建议!! :)
答案 0 :(得分:5)
你可以使用一种风格:
<Style TargetType="{x:Type Button}">
<EventSetter Event="Click" Handler="btnMerchants_click"/>
</Style>
如果你在没有x:Key
的地方的资源中进行设置,它将适用于所有按钮。
e.g。如果您有一个网格,并且您希望某个样式应用于其中的所有按钮,您可以这样定义:
<Grid>
<Grid.Resources>
<Style TargetType="{x:Type Button}">
<EventSetter Event="Click" Handler="Button_Click"/>
</Style>
</Grid.Resources>
<Grid.Children>
<!-- Buttons and stuff -->
</Grid.Children>
</Grid>
如果您只想将其应用于某些按钮,请设置x:Key
并引用样式:
<Grid>
<Grid.Resources>
<Style x:Key="AttachClickHandlerStyle" TargetType="{x:Type Button}">
<EventSetter Event="Click" Handler="Button_Click"/>
</Style>
</Grid.Resources>
<Grid.Children>
<Button Content="Click me!" Style="{StaticResource AttachClickHandlerStyle}"/>
<Button Content="Click me, too!" Style="{StaticResource AttachClickHandlerStyle}"/>
<Button Content="Something different." Click="SomeOtherButton_Click"/>
</Grid.Children>
</Grid>
通常,您应该将多次出现的属性重构为样式以防止重复代码。
此外,由于您是初学者,因此可能会对以下文章感兴趣:
答案 1 :(得分:3)
您可以在父容器上使用路由事件 例如:
<Grid Button.Click="GeneralHandler">
<!-- Some stuff -->
</Grid>
在背后的代码中:
public void GeneralHandler(object sender, RoutedEventArgs e)
{
Button b = e.OriginalSource as Button;
//<-- Do something
}
您可以详细了解on MSDN。
答案 2 :(得分:1)
只需为所有按钮分配完全相同的Click =“btnCustomers_click”处理程序(带有常规函数名称)。然后在该函数中根据发件人的名称打开正确的窗口。