2011-04-20 73 views
4

我是WPF/XAML的新手,所以请忍受一下noob问题。是否可以动态地将事件添加到XAML中的按钮?

我设计了一个控制面板,将最终充当我的网站后台,和刚刚完成使用TabControl的元素标签铺设了所有的按钮。 (这是使用Visual Studio'Window'窗体设计的)

我的问题是,是否可以在xaml.cs文件中创建一个函数,以动态处理所有按钮元素的特定事件? ..

我有30多个按钮,不想要30个不同的Click =“btnCustomers_click”+他们在c#代码中的各自的功能我想要的是说一个功能,可以让我点击任何按钮,然后打开一个新的窗口,这取决于被选择按钮。

在下面的代码是我的当前设计然而,对于30+按钮其将很多的功能,这将是混乱的,因此我的愿望,有一个功能CONT根据点击哪个按钮打开哪个窗口打开。

 private void btnMerchants_click(object sender, RoutedEventArgs e) 
    { 
     var newWindow = new frmMerchants(); 
     newWindow.Show(); 
    } 

在此先感谢您给出的任何建议! :)

回答

5

你可以使用一个样式这样的:

<Style TargetType="{x:Type Button}"> 
    <EventSetter Event="Click" Handler="btnMerchants_click"/> 
</Style> 

如果您在资源设置这地方没有x:Key这将适用于所有的按钮。


例如,如果你有一个网格,你想一个特定的风格,以适用于所有的按钮,你将它定义成这样:

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

一般来说,你应该重构发生不止一次成风格,以防止重复代码的任何属性。

而且,因为你是一个初学者,下面的文章可能会感兴趣:

Styling and Templating
Resources Overview

+0

伟大的答案,谢谢你的时间! :)当我完成工作时,生病检查今晚的链接 – aaron 2011-04-20 23:14:24

1

刚分配完全相同的点击=“btnCustomers_click”处理器(与一般的函数名),以所有按钮。然后在函数中根据发件人的姓名打开正确的窗口。

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

相关问题