是否可以在XAML中向按钮动态添加事件?

aar*_*ron 4 c# wpf xaml

我是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();
    }
Run Code Online (Sandbox Code Playgroud)

提前感谢任何建议!! :)

H.B*_*.B. 5

你可以使用一种风格:

<Style TargetType="{x:Type Button}">
    <EventSetter Event="Click" Handler="btnMerchants_click"/>
</Style>
Run Code Online (Sandbox Code Playgroud)

如果你在没有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>
Run Code Online (Sandbox Code Playgroud)

如果您只想将其应用于某些按钮,请设置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>
Run Code Online (Sandbox Code Playgroud)

通常,您应该将多次出现的属性重构为样式以防止重复代码.

此外,由于您是初学者,以下文章可能会引起关注:

样式和模板
资源概述